目录
递推公式
推导式comprehensions(又称解析式),是Python的一种独有特性。推导式是可以从一个数据序列构建另一个新的数据序列(一个有规律的列表或控制一个有规律列表)的结构体。 共有三种推导:`列表推导式`、`集合推导式`、`字典推导式。
变量名 = [表达式 for 变量 in 列表 for 变量 in 列表]
变量名 = [表达式 for 变量 in 列表 if 条件]
list1 = [i for i in range(10)]
print(list1) #[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
list1 = [i for i in range(10) if i % 2 == 0]
print(list1) #[0, 2, 4, 6, 8]
#集合推导式:仍然有去重功能
list1 = [1, 1, 2]
set1 = {i ** 2 for i in list1}
print(set1) # {1, 4}
函数
def 函数名(参数):
函数体
...
return 返回值
#return可以退出当前函数,导致return下方的代码不执行。
#调用
函数名(参数)
def sum_num(a, b):
return a + b
result = sum_num(10, 20)
print(result) # 30
函数的说明文档
def 函数名(参数):
""" 说明文档的位置 """
代码
......
#查看说明文档
help(函数名)
函数嵌套
所谓函数嵌套调用指的是一个函数里面又调用了另外一个函数。
变量的作用域
1.局部变量
所谓局部变量是定义在函数体内部的变量,即只在函数体内部生效。
def testA():
a = 100
print(a)
testA() # 100
print(a) # 报错:name 'a' is not defined
2.全局变量
所谓全局变量,指的是在函数体内、外都能生效的变量。
# 定义全局变量a
a = 100
def testA():
print(a) # 访问全局变量a,并打印变量a存储的数据
def testB():
print(a) # 访问全局变量a,并打印变量a存储的数据
testA() # 100
testB() # 100
3.global关键字
num = 100
def A():
num = 200
def B():
global num
num = 200
A()
print(num) # 100
B()
print(num) # 200
函数参数
位置参数:
调用函数时根据函数定义的参数位置来传递参数。
递和定义参数的顺序及个数必须一致。
def user_info(name, age, gender):
print(f'您的名字是{name}, 年龄是{age}, 性别是{gender}')
user_info('TOM', 20, '男')
关键字参数
函数调用,通过“键=值”形式加以指定。
函数调用时,如果有位置参数时,位置参数必须在关键字参数的前面,但关键字参数之间不存在先后顺序。
def user_info(name, age, gender):
print(f'您的名字是{name}, 年龄是{age}, 性别是{gender}')
user_info('Rose', age=20, gender='女')
user_info('小明', gender='男', age=16)
缺省参数(默认值)
缺省参数也叫默认参数,用于定义函数,为参数提供默认值,调用函数时可不传该默认参数的值(注意:所有位置参数必须出现在默认参数前,包括函数定义和调用)。
函数调用时,如果为缺省参数传值则修改默认参数值;否则使用这个默认值。
def user_info(name, age, gender='男'):
print(f'您的名字是{name}, 年龄是{age}, 性别是{gender}')
user_info('TOM', 20)
user_info('Rose', 18, '女')
不定长参数
不定长参数也叫可变参数。用于不确定调用的时候会传递多少个参数(不传参也可以)的场景。此时,可用包裹(packing)位置参数,或者包裹关键字参数,来进行参数传递,会显得非常方便。
包裹位置传递
传进的所有参数都会被args变量收集,它会根据传进参数的位置合并为一个元组(tuple),args是元组类型,这就是包裹位置传递。
def user_info(*args):
print(args)
# ('TOM',)
user_info('TOM')
# ('TOM', 18)
user_info('TOM', 18)
包裹关键字传递
def user_info(**kwargs):
print(kwargs)
# {'name': 'TOM', 'age': 18, 'id': 110}
user_info(name='TOM', age=18, id=110)
#求函数所有参数的和(参数数量不固定)
def func(*args, **kwargs):
result = 0
for i in args:
result += i
for i in kwargs.values():
result += i
return result
print(func(10, 20, 30, num1 = 40, num2 = 50)) #结果:150
python拆包
拆包: 对于函数中的多个返回数据, 去掉元组, 列表 或者字典直接获取里面数据的过程。
#元组拆包
def return_num():
return 100, 200
num1, num2 = return_num()
print(num1) # 100
print(num2) # 200
#字典拆包
dict1 = {'name': 'TOM', 'age': 18}
a, b = dict1
# 对字典进行拆包,取出来的是字典的key
print(a) # name
print(b) # age
print(dict1[a]) # TOM
print(dict1[b]) # 18
lambda表达式
lambda 参数列表 : 表达式
# lambda表达式
fn2 = lambda: 100
#函数
def fn1():
return 100
#带参数的lambda
def add(a, b):
return a + b
result = add(1, 2)
print(result)
fn1 = lambda a, b: a + b
print(fn1(1, 2))
lambda参数形式
#无参数
func1 = lambda : 100
print(func1()) #100
#一个参数
func2 = lambda a : a
print(func2('shuiage')) #shuaige
#默认参数
func3 = lambda a, b, c=100: a + b + c
print(func3(10, 20)) #130
#可变参数:*args
func4 = lambda *args: args
print(func4(10, 20, 30)) #(10, 20, 30)
#可变参数:**kwargs
func5 = lambda **kwargs: kwargs
print(func5(name = 'Tom', age = 23, gender = 'male')) #{'name': 'Tom', 'age': 23, 'gender': 'male'}
带判断的lambda表达式
func5 = lambda a, b: a if a > b else b
print(func5(1000, 500)) # 1000