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小白陆禄绯,欢迎各位大佬的指点!!!

 

posted @ 2022-03-22 22:59  陆禄绯  阅读(69)  评论(0)    收藏  举报