内置函数 匿名函数 eval "exec execute" compile sorted map filter等常见函数 repr chr ord

内置函数

什么是内置函数? 就是python给你提供的. 拿来直接用的函数, 比如print., input等等. 截⽌止 到python版本3.6.2 python⼀共提供了了68个内置函数. 他们就是python直接提供给我们的. 有 ⼀些我们已经⽤用过了了. 有一些还没有⽤用过. 还有⼀些需要学完了了⾯向对象才能继续学习的. 今 天我们就认识一下python的内置函数

 

作用域相关:    locals()      返回当前作⽤用域中的名

                          globals()    返回全局作⽤用域中的名

 

迭代器相关:

    range() 生成数据

    next() 迭代器向下执行⼀次, 内部实际使用了__next__()方法返回迭代器的下⼀个项⽬

    iter() 获取迭代器, 内部实际使⽤用的是__iter__()⽅方法来获取迭代器

输入和输出相关:   

   input()    获取⽤用户输入的内容   

   print()    打印输出 

内存相关:

  hash() 获取到对象的哈希值(int, str, bool, tuple)

  id() 获取到对象的内存地址

 

数字算出来就是数字本身. 其他的数据算完一坨很长的数字
print(hash("123456789")) # hash算法. 最后算出来的一定是一个数字
print(id("呵呵"))
 is  比较内存地址
 ==  比较的是值

 

 

 

⽂件操作相关:

  open() 用于⼝打开⼀个文件, 创建⼀个文件句柄

模块相关:

  __import__() 用于动态加载类和函数

 

re = __import__(input("请输入你要导入的模块名:"))
re.search()

 

 

 

帮助:

  help() 函数⽤用于查看函数或模块⽤用途的详细说明

    print(help(str))  # 查看帮助....高级框架

 

调⽤相关:

  callable() ⽤用于检查⼀个对象是否是可调⽤用的. 如果返回True, object有可能调⽤用失败,   但 如果返回False. 那调用绝对不会成功

查看内置属性:

  dir() 查看对象的内置属性, 方法. 访问的是对象中的__dir__()⽅法

基础数据类型相关:

数字相关:

  bool() 将给定的数据转换成bool值. 如果不给值. 返回False

  int() 将给定的数据转换成int值. 如果不给值, 返回0

  float() 将给定的数据转换成float值. 也就是小数

  complex() 创建⼀个复数. 第⼀个参数为实部,   第⼆个参数为虚部. 或者第⼀个参数直接 ⽤字符串来描述复数

进制转换:

  bin() 将给的参数转换成二进制

  otc() 将给的参数转换成八进制

  hex() 将给的参数转换成十六进制
数学运算:

  abs() 返回绝对

  divmode()     返回商和余数         ##print(divmod(20, 3))    ##(6, 2)

 

  round()        四舍五入   整数是奇数 -> 正常四舍五入   偶数 -> 五舍六入

 

  pow(a, b)    求a的b次幂, 如果有三个参数. 则求完次幂后对第三个数取余       

  sum()    求和       

  min()    求最小值       

  max()    求最大值

和数据结构相关:   

列表和元组:       

  list()        将⼀个可迭代对象转换成列列表       

  tuple()    将⼀个可迭代对象转换成元组       

  reversed()    将⼀个序列翻转, 返回翻转序列列的迭代器       

  slice()    列表的切片 

 

huiwen = "上海自来水来自海上" #这里判断回文

s = huiwen[::-1]
it = reversed(huiwen) # 返回的是迭代器reversed  返回的是迭代器
s = ""
for el in it:
    s += el
print(s)

 


lst = ["河南话", "四川话", "东北", "山东", "上海"]
# s = slice(3,5) # 切片. 麻烦   #用的是slice切片,同理lst[3,5]
# print(lst[s]) #这里切片太麻烦所以基本不用slice

 

 

          # 家,

 

# 记这个                 ####拿到一个列表中的索引和所对应的元素
for i in range(len(lst)):
    print(i, lst[i])

for i, el in enumerate(lst, 1):
    print(i, el)

 

 

 

字符串串相关:       

  str()            将数据转化成字符串串       

  format()     与具体数据相关, ⽤用于计算各种小数, 精算等 #####这里是重点,主要是数值和浮点数居多

  bytes()  把字符串串转化成bytes类型

 

   bytearray()    返回⼀一个新字节数组. 这个数字⾥里里的元素是可变的, 并且每个元素的值                得范 围是[0,256) 

 

  memoryview()  查看bytes在内存中的情况

    ord()    输入字符找带字符编码的位置       

  chr()    输入位置数字找出对应的字符       

  ascii()  是ascii码中的返回该值 不是就返回\u... 

  repr()   ###########返回⼀个对象的string形式

 

转义字符
\n 换行
\t tab 制表符
\r 回车
\"   双引号
\'  单引号
\\    \
print('你好, 我叫周杰伦.我来自\\n台湾. 我老婆叫昆凌')

repr() # 还原字符串最官方的效果  这里的字符串能够被所有语言显示,用其他语言能原封不动的显示字符串的内容
str:python的字符串
repr: 所有的字符串
print(repr("你好. \\n我叫\周杰伦"))  # python -> repr() -> cpython c里面. 报错

print(r"\n\t范德萨发生\r\b\ffdsaf")  # 原封不动的显示字符串

 

 

 

 

数据集合:

  dict() 创建⼀个字典
  set() 创建⼀个集合

   frozenset() 创建⼀个冻结的集合. 冻结的集合不能进⾏添加和删除操作

其他相关:

   len() 返回⼀个对象中的元素的个数

  sorted() 对可迭代对象进⾏行行排序操作(讲完lamda后再讲这个)

   enumerate() 获取集合的枚举对象

   all()      可迭代对象中全部是True, 结果才是True     类似于and     

  any()    可迭代对象中有⼀个是True, 结果就是True      类似于or

 

   zip()    函数⽤于将可迭代的对象作为参数, 将对象中对应的元素打包成⼀个元组, 然后返回由这些元组组成的开了了表. 如果各个迭代器的元素个数不一致, 则返回列列表⻓度与 最短 的对象相同. 

 

#       ###zip 拉链函数
lst1 = ["赵四", "刘能", "香秀"]
lst2 = ["刘晓光", "王小利"] # 水桶效应
lst3 = ["街舞", "磕巴", ""]
z = zip(lst1, lst2, lst3)
print("__iter__" in dir(z)) # 判断是否是可迭代对象
for el in z:
    print(el)
# True
# ('赵四', '刘晓光', '街舞')
# ('刘能', '王小利', '磕巴')

 

匿名函数

# 匿名函数统一的名字是:<lambda>
fn = lambda a, b : a + b    # 定义一个很简单的函数. 复杂的函数不要用lambda
ret = fn(3, 5)
print(ret)
print(func)
print(fn)

     使用场景: 配合着sorted, map, filter 一起使用
  sorted 排序函数.  让你自己去定义排序的规则

  filter()     过滤(讲完lamda)          

  map()    会根据提供的函数对指定序列列做映射(lamda)   

 

lst = [11,5,36,1,27,58]
s = sorted(lst) # 默认从小到大排序.    ###   sorted默认值是将数值从小到大排序
print(s)

 

 

lst = ["胡一菲", "张伟", "关谷神奇", "曾小贤吕小布", "诺澜"]
# 按照字符串长度排序
def func(s):
    return len(s) # 返回长度
# # 执行流程:
# # 把可迭代对象中的每一项拿出来, 作为参数传递给后面key函数.
# # 函数返回数字. 根据数字进行排序
s = sorted(lst, key=func)
print(s)

print(sorted(lst, key=lambda s:len(s) ))
##### sorted排序

['张伟', '诺澜', '胡一菲', '关谷神奇', '曾小贤吕小布']
['张伟', '诺澜', '胡一菲', '关谷神奇', '曾小贤吕小布']

####

 

 

 

lst = [
    {"name":"alex", "shengao":150, "tizhong":250},
    {"name":"wusir", "shengao":158, "tizhong":150},
    {"name":"taibai", "shengao":177, "tizhong":130},
    {"name":"ritian", "shengao":165, "tizhong":130},
    {"name":"nvshen", "shengao":160, "tizhong":120},
    {"name":"baolang", "shengao":183, "tizhong":190}
]

# 按照体重进行排序    sorted排序
 print(sorted(lst, key=lambda dic:dic['tizhong'], reverse=True))

 

 

 

 

# filter 过滤
lst = ["张无忌", "张翠山", "范冰冰", "金毛狮王", "李冰冰"]

# 过滤掉姓张的人
# 把可迭代对象打开. 把内部元素一个一个的传递给前面的函数. 由这个函数决定此项是否保留
f = filter(lambda name : not name.startswith(""), lst)
print("__iter__" in dir(f)) # 可迭代对象
for el in f:
    print(el)

 

 

lst = [
    {"name":"alex", "shengao":150, "tizhong":250},
    {"name":"wusir", "shengao":158, "tizhong":150},
    {"name":"taibai", "shengao":177, "tizhong":130},
    {"name":"ritian", "shengao":165, "tizhong":130},
    {"name":"nvshen", "shengao":160, "tizhong":120},
    {"name":"baolang", "shengao":183, "tizhong":190}
]

# 过滤掉体重大于180的人   想要的是 小于180     filter 过滤
  f = filter(lambda d : d['tizhong'] <= 180, lst) print(list(f))

 

 

 

map()  映射函数
lst = ["篮球球", "打打台球", "唱歌", "爬慌山", ""]

m = map(lambda s: "爱好:"+s , lst)

print(list(m))

#['爱好:篮球球', '爱好:打打台球', '爱好:唱歌', '爱好:爬慌山', '爱好:步']#

 

 

lst = [1,5,78,12,16] # 计算每个数字的平方     map()  映射函数

print([i **2 for i in lst]) ##[1, 25, 6084, 144, 256]
m = map(lambda i: i ** 2, lst) 
print(list(m)) ##[1, 25, 6084, 144, 256]

 

 

 

 

 

参考资料:内置函数分类图

 

https://www.processon.com/view/link/5b4ee15be4b0edb750de96ac

 

 

 

 

 

 

 

 

 

 

eval 是把字符串类型的数据作为代码进行执行
eval 是把字符串类型的数据作为代码进行执行
s = "18+2"
ret = eval(s) # 执行字符串类型的代码
print(ret)

code
= input("请输入你要执行的代码:") ret = eval(code) print(ret)
s
= "{'name':'alex', 'age':18, 'isMan':False}" # 字符串 # 把字符串类型的代码还原回字典, 列表, 元组 ret = eval(s) # 侧重的有返回值 print(ret) print(type(ret))

 

 

exec execute 执行字符串类型的代码, 不能太长. 不能太乱
exec execute 执行字符串类型的代码, 不能太长. 不能太乱
code = input("请输入你要执行的代码")
exec(code) # 没有返回值. 想要返回值用eval
print(a)   # pycharm报错不一定准


compile 编译: 把你要执行的代码先预编译. 通过exec和eval可以执行我们的代码

code = '''
for i in range(10):
    if i % 2 == 0:
        print(i)
'''
compile(code, "", "exec") # 预加载代码
c = compile(code, "", "exec") # 预加载代码
# exec
exec(c) # 运行代码

可以使用complie写一个编程大赛.

 

posted @ 2018-12-12 17:56  言吾  阅读(325)  评论(0编辑  收藏  举报