# 位置参数:是指调用时的参数个数和顺序必须与定义的参数个数和顺序相同# 关键字参数:是在函数调用时,使用"形参名称=值"的方式进行传参,传递三叔顺序可以和定义时参数的顺序不同# 默认值参数:是在函数定义时,直接对形式参数进行赋值,在调用时如果该参数不传值,将使用默认值,如果该参数传值,则使用传递的值defhappy_birthday(name='LL', age=18):print('祝'+ name +'生日快乐')print(str(age)+'岁生日快乐')#
happy_birthday()# happy_birthday(18)#TypeError: can only concatenate str (not "int") to str
happy_birthday('ll')
happy_birthday(age=18)
happy_birthday(name="ll")deffun(a,b=20):#a作为位置参数,b默认值参数pass# def fun(a=20,b):#语法错误,当位置参数和默认值参数同时存在的时候,位置参数在后会报错# pass#TODO 当位置参数和关键字参数同时存在的时候,应该遵循 位置参数在前,默认值参数在后
可变参数的使用
# 可变参数:个数可变的位置参数deffun(*param):print(type(param))for item in param:print(item)
fun(10,20,30)
fun(10)
fun("lll")
fun([10,20,30])# 实际上传递的是一个参数# 在调用时,参数前加一个星,会将列表进行解包
fun(*[10,20,30])
fun(*"lll")# 个数可变的关键字参数deffun2(**kwparam):print(type(kwparam))for key, value in kwparam.items():print(key,'====', value)
fun2(name='ll', age=19, height=180)# fun2('ll',19,180)#TypeError: fun2() takes 0 positional arguments but 3 were given
d ={'name1':'ll','age2':20,'height3':170}# fun(d)#TypeError: fun() got an unexpected keyword argument 'name'
fun2(**d)
函数返回值的使用
# 函数的返回值defcalc(a, b):print(a + b)
calc(10,20)print(calc(10,20))# Noneprint('-'*60)defcalc2(a, b):
s = a + b
return s
print(calc2(10,20))# 30
get_s=calc2(10,30)print(get_s)print('-'*60)defget_sum(num):
total_sum=0
odd_sum=0
even_sum=0for i inrange(1,num+1):if i%2==0:
even_sum+=i
else:
odd_sum+=i
total_sum+=i
return even_sum,odd_sum,total_sum
#解包数值
a,b,c = get_sum(10)print(a)print(b)print(c)print('-'*60)print(type(get_sum(10)))print(*get_sum(10))
局部变量的作用域
#变量的作用域:是指变量起作用的范围,根据范围作用的范围可分为局部变量和全局变量#局部变量:在函数定义处的参数和函数内部定义的变量,作用范围:仅在函数内部,函数执行结束,局部变量的生命周期也结束#全局变量:在函数外定义的变量或函数内部使用global关键字修饰的变量,作用范围:整个程序,程序与逆行结束,全局变量的生命周期才结束defcalc(a,b):
s=a+b
return s;# print(a,b,s)#a,b是函数的参数,参数是局部变量,s函数中定义的变量,为局部变量
result = calc(10,30)print(result)
全局变量的作用域
# 变量的作用域:是指变量起作用的范围,根据范围作用的范围可分为局部变量和全局变量# 局部变量:在函数定义处的参数和函数内部定义的变量,作用范围:仅在函数内部,函数执行结束,局部变量的生命周期也结束# 全局变量:在函数外定义的变量或函数内部使用global关键字修饰的变量,作用范围:整个程序,程序与逆行结束,全局变量的生命周期才结束'''
匿名函数lambda是指没有名字的函数,这种函数只能使用一次,一般是在函数的函数体只有一句代码且只有一个返回值时,可以使用匿名函数来简化
语法结构: result = lambda 参数列表:表达式
'''
a =10defcalc(x, y):return a + x + y
result = calc(10,30)print(a)print(calc(10,20))defcalc2(x, y):
a =200# 局部变量return a + x + y # 此处的a为局部变量,为当前函数中定义的aprint(calc2(100,300))# 600defcalc3(x, y):global s
s =1000# 声明和赋值,必须分开执行return s + x + y # s是在函数中定义的变量,但是使用了global关键字声明,这个变量s变成了全局变量print(s)#NameError: name 's' is not defined =========>s global修饰的参数,必须在函数被调用后,才能使用否则报错print(calc3(1000,3000))print(s)
匿名函数的使用
'''
匿名函数lambda是指没有名字的函数,这种函数只能使用一次,一般是在函数的函数体只有一句代码且只有一个返回值时,可以使用匿名函数来简化
语法结构: result = lambda 参数列表:表达式
'''defcalc(a, b):return a + b
print(calc(10.,20))# 匿名函数
result =lambda a, b: a + b
print(type(result))# <class 'function'># 使用匿名函数print(result(10,50))print('-'*66)
lst =[10,20,30,40,50]for i inrange(len(lst)):print(lst[i])print()for i inrange(len(lst)):
result =lambda x: x[i]print(result(lst))print('-'*66)
student_scores =[{'name':'张三','score':98},{'name':'李四','score':90},{'name':'王五','score':95},{'name':'李一','score':66}]#对列表进行排序,排序规则,按成绩进行排序print(student_scores)print('-'*66)
student_scores.sort(key=lambda x:x.get('score'),reverse=True)print(student_scores)'''
递归函数
1.在一个函数的函数体内调用该函数本身,该函数就是递归函数
2.一个完整的递归操作由两部分组成,一部分时递归调用,一部分时递归终止条件,一般可使用if-else结构来判断递归的调用和递归的终止
'''
递归函数
'''
递归函数
1.在一个函数的函数体内调用该函数本身,该函数就是递归函数
2.一个完整的递归操作由两部分组成,一部分时递归调用,一部分时递归终止条件,一般可使用if-else结构来判断递归的调用和递归的终止
斐波那契数列:f(n)=f(n-1)+f(n-2)
'''deffac(n):#n的阶乘,n!=nif n==1:return1else:return n*fac(n-1)#自己调用自己print(fac(5))#120// 斐波那契数列
deffac2(n):if n ==1or n ==2:return1else:return fac(n -1)+ fac(n -2)print(fac2(9))print('-'*66)for i inrange(1,10):print(fac2(i),end='\t')
内置函数
数据类型转换函数的使用
'''
常用的内置函数
1.数据类型转换函数
函数名称 描述说明
bool(obj) 获取指定对象obj的布尔值
str(obj) 将指定对象obj转成字符串类型
int(x) 将x转成int类型
float(x) 将x转成float类型
list(sequence) 将序列转成列表类型
tuple(sequence) 将序列转成元组类型
set(sequence) 将序列转成集合类型
'''print('非空字符串的布尔值:',bool('hello'))# Trueprint('空字符串的布尔值:',bool(''))# Falseprint('空列表的布尔值:',bool([]))# Falseprint('空列表的布尔值:',bool(list()))# Falseprint('空元组的布尔值:',bool(()))# Falseprint('空元组的布尔值:',bool(tuple()))# Falseprint('空字典的布尔值:',bool({}))# Falseprint('空字典的布尔值:',bool(dict()))# Falseprint('--'*20+'将其他类型转成字符串类型'+'--'*20)print('非0数值的布尔值:',bool(12))# Trueprint('整数0的布尔值:',bool(0))# Falseprint('浮点数0.0的布尔值:',bool(0.0))# False# 将其他类型转成字符串类型print('--'*20+'将其他类型转成字符串类型'+'--'*20)
lst =[1,2,3,4,]print(type(lst), lst)
s =str(lst)print(type(s), s)#float类型和str类型转成int类型print('--'*20+'float类型和str类型转成int类型'+'--'*20)print(int(98.7)+int('100'))#注意事项# print(int('98.7'))#ValueError: invalid literal for int() with base 10: '98.7'# print(int('a'))#ValueError: invalid literal for int() with base 10: 'a'#int类型和str类型转成float类型print('--'*20+'int类型和str类型转成float类型'+'--'*20)print(float(98)+float('100')+float('10.111'))print('--'*20+'str类型转成list类型'+'--'*20)
s='hello'print(list(s))print('--'*20+'列表,元组,集合的转换'+'--'*20)
seq=range(1,10)print(tuple(seq))print(list(seq))print(set(seq))