python函数微讲解(五)
python函数微讲解(五)
1.三元表达式
使用场景:二选一的时候推荐使用三元表达式。
三元表达式的语法结构:“值1 if 条件 else 值2”,底层原理是:条件成立输出值1,条件不成立输出值2。来看具体例子表现:
# 获取用户输入,如果是oscar就打印帅哥,如果不是就打印你好丑 # 方式一:分支结构 # username = input('你的名字是>>:').strip() # if username == 'oscar': # print('帅哥') # else: # print('你好丑') # 方式二:三元表达式 username = input('你的名字是>>:').strip() res = '帅哥' if username == 'oscar' else '你好丑' print(res)
2.分支结构的简化版本
当分支结构的子代码块只有简单的一行时,可以简化:
# 分支结构简化版本 user = input('你的名字是>>:').strip() if user == 'oscar':print(user) else:print('你好')
3.各种生成式
3.1列表生成式
当我们有一个列表,想要给每一个列表元素都做相同的修改,我们可以这样做:
l = ['jason', 'kevin', 'tony', 'oscar', 'jerry'] # 方式一:for+append # l1 = [] # 定义一个新的空列表来接受新的值 # for i in l: # a = i + '_11' # l1.append(a) # print(l1) # ['jason_11', 'kevin_11', 'tony_11', 'oscar_11', 'jerry_11'] # 方式二:列表生成 res = [a+'_11' for a in l] print(res) # ['jason_11', 'kevin_11', 'tony_11', 'oscar_11', 'jerry_11']
用列表生成式也可以筛选元素:
# 用列表生成式筛选除了'tony'以外的元素 res = [a+'_11' for a in l if a != 'tony'] print(res) # ['jason_11', 'kevin_11', 'oscar_11', 'jerry_11']
注意:列表生成式中不允许使用“else”,因为“else”跟for和if都可以连用,所以用的话会产生分歧!
3.2字典生成式
可以将两个列表中的元素作为键值对组成字典:
l = ['name','age','sex'] l1= ['oscar',21,'男'] #方式一:for循环 # dict_a = {} # for i in range(len(l)): # dict_a[l[i]] = l1[i] # print(dict_a) # {'name': 'oscar', 'age': 21, 'sex': '男'} # 方式二:字典生产式 res = {l[i]:l1[i] for i in range(len(l))} print(res) #{'name': 'oscar', 'age': 21, 'sex': '男'}
字典生成式也可以筛选元素:
res = {l[i]:l1[i] for i in range(len(l)) if i == 2} print(res) # {'sex': '男'}
3.3集合生成式
res = {i for i in range(10)} print(res) # {0, 1, 2, 3, 4, 5, 6, 7, 8, 9} res = {i for i in range(10) if i == 2} print(res) # {2}
4.匿名函数
Python中用lambda来定义匿名函数,匿名函数就是没有名字的函数,他只是一个表达式,它的主体不是代码块,就是一个表达式,不能访问自己的局部名称空间以外或全局名称空间的值。
我们来看一下例子:
num = lambda a,b : a+b # 因为lambda返回的是一个函数对象,所以要定义一个变量名去接收 print(num(10,10)) # 20
5.重要的内置函数
5.1内置函数之map映射
l = [1,2,3,4] # 每一个元素增加10 # 方式一:列表生成式 # res = [i + 10 for i in l] # print(res) # [11, 12, 13, 14] # 方式二:内置函数 def index(i): return i + 10 print(map(index,l)) # <map object at 0x000001CAEDB951D0>迭代器以后会讲 print(list(map(index,l))) # [11, 12, 13, 14] # res = map(lambda i:i+10,l) # print(list(res)) # [11, 12, 13, 14]
5.2内置函数之zip拉链
# 将两个列表的元素以一对应 l = [1, 2, 3, 4] l1 = [11, 22, 33, 44] # 方式一:列表生产式 # res = [(l[i],l1[i]) for i in range(len(l))] # print(res) #[(1, 11), (2, 22), (3, 33), (4, 44)] # 方式二:内置函数 res = zip(l,l1) print(list(res)) # [(1, 11), (2, 22), (3, 33), (4, 44)]
当列表的元素个数不相等时:
# 当两个列表的元素个数不相等时,以个数少的为主 l = [1, 2] l1 = [11, 22, 33, 44] res = zip(l,l1) print(list(res)) # [(1, 11), (2, 22)]
5.3内置函数之filter过滤
l1 = [11, 22, 33, 44, 55, 66] # 筛选出大于30的元素 # 方式一:列表生成器 # res = [l1[i] for i in range(len(l1)) if l1[i] > 30] # print(res) # 方式二:内置函数 def index(n): return n > 30 res = filter(index,l1) print(list(res)) # [33, 44, 55, 66] # 匿名函数 res = filter(lambda n:n > 30,l1) print(list(res)) # [33, 44, 55, 66]
5.4内置函数之reduce归总
# 以前是内置函数,现在是某个函数下面的子函数 l = [1, 2, 3, 4] # 求元素相加的和 from functools import reduce def index(a,b): return a+b res = reduce(index,l) print(res) # 匿名函数 # res = reduce(lambda a,b:a+b,l) # print(res)
6.常见的内置函数
1.abs() 获取绝对值(不考虑正负号)
print(abs(-11)) # 11 print(11) # 11
2.all()与any()
l = [1, 0, 1, True] print(all(l)) # 列表中的所有元素对应的布尔值都为True,才会输出True,否则就是Fales print(any(l)) # 列表中的所有元素对应的布尔值有一个为True,就会输出True
3.bin() oct() hex()
# 产生进制数 print(bin(100)) # 0b1100100 print(oct(100)) # 0o144 print(hex(100)) # 0x64
4.bytes() 类型转换
l = '你好呀,oscar' print(bytes(l,'utf8')) # 把字符串转换为字节 b'\xe4\xbd\xa0\xe5\xa5\xbd\xe5\x91\x80\xef\xbc\x8coscar' print(str(b'\xe4\xbd\xa0\xe5\xa5\xbd\xe5\x91\x80\xef\xbc\x8coscar','utf8')) # 转换为字符串 你好呀,oscar
5.callable() 判断当前对象是否可以加括号调用
l = '你好呀,oscar' def index(): pass print(callable(l)) # False 判断变量名后面是否可以加括号,可以的话返回True,不行的话返回False print(callable(index)) # True
6.chr()、ord() 字符与数字的对应转换
print(chr(85)) # U 根据ASCII码找到对应关系 print(ord('U')) # 85
7.dir()
print(dir(11.2)) # 返回数据类型可以调用的内置方法(查看对象内部可调用的属性) print(dir([1,2]))
8.divmod()
print(divmod(100,10)) # (10, 0) 第一个参数是整数,第二个是余数 print(divmod(100,12)) # (8, 4)
9.enumerate() 枚举
l = ['jason', 'kevin', 'oscar', 'tony'] for a,b in enumerate(l): print(a,b) # 类似于每输出一次就计数一次 # 还可以控制起始位置 for i,j in enumerate(l,start=2): print(i,j)
10.eval() exec() 识别字符串中的python代码 使用频率很低
eval('print("你好呀")') # 你好呀 exec('print("你好呀")') # 你好呀 l = ''' for i in range(10): print(i) ''' eval(l) # 报错,只能识别简单的Python语法 exec(l) # 打印1-10,能识别一些逻辑语法
这里是IT小白陆禄绯,欢迎各位大佬的指点!!!