#实参:有实际意义的参数
#形参:参数本身没有意义,有实参赋予形参值后,该形参就具备了意义
#形参是对实参的值拷贝:可变与不可变类型
'''
实参(必须先传位置实参,再传关键字实参)
1:拿实际值进行传参 2.拿位置进行传参,形参与实参传参,位置需要对应,参数不能多也不能少
3.那关键字实参进行传参,指名道姓进行传参 -传参的过程指名道姓形参
形参
1:位置形参:位置形参可以有位置进行传参,也可以关键子实参进行传值
2:默认形参:有默认值的形参可以传参,实参会赋值给形参,不传参参数为默认值
位置形参必须在默认形参之前,但是使用位置传参时默认参数就没有意义
3:可变长位置形参:可以接收0~N个位置实参,0个就是空元组 |约定俗成使用*args
4.有无默认值关键字形参
5.可变长关键字形参:可以接收0~N个关键字实参,0个就是空字典 |约定俗称使用**kwargs
注:假设在一个函数中出现了上方所有类型的参数,顺序自上而下
结论:定义函数形参时,*号前所有参数称之为位置形参,*号后所有参数称之为关键字形参
实参组合传参规则:必须先传位置参数,再传关键字参数
可变长位置形参,只能接受位置实参,要想被赋上值,前面有值的位置形参的默认值没有意义
所有位置形参全部采用位置实参进行传值
所有关键字形参全部采用关键子实参进行传参
'''
打散机制
def fn(*args, **kwargs):
print(args)
print(kwargs)
fn(*(1,2,3),{'a':1,'b':2,'c':3})
# 因为*args和**kwargs会把接受的实参放在元组和字典里,所以需要打散机制
# *单列容器:*tuple|*list 会打散单列容器
# **双列容器:**dict 会打散双列容器
# *str 字符串也会被打散
# 可以在传参的时候写,也可以在print(*)里面写
函数的嵌套使用
#在一个函数中调用另一个函数
def a():
print(0)
a()
#在函数a中,我们调用了另一个函数(可以是系统函数,也可以时自己定义的函数),这就叫函数的嵌套使用
#当在函数a中,调用函数b时,但是再调用函数a时,调用的语法必须要写在b函数声明的后面
字符串的比较
#在python中字符串的比较,其实是对应Ascii表的十进制的数值
#A~Z:65~90 32代表空格 a~z:97~122