文章目录
一、函数定义与调用
1、为什么要设计和编写函数?
多次执行的相似甚至完全相同的代码块,为了避免直接复制代码块的方法实现复用,通过设计和编写函数还实现对多次复用。以便于代码维护和代码测试,以及代码可读性。
2、函数的语法格式
python在定义函数时不需要指定参数类型
'''
@Author :S1Lu
@Date :2022/10/21 11:10
'''def 函数名([参数列表]):
'''注释''
函数体
3、使用函数计算斐波那契数列中小于参数n的所有值
'''
@Author :S1Lu
@Date :2022/10/21 11:10
'''
def fib(n):
a , b = 1 , 1
while a < n:
print(a,end=' ')
a , b = b , a+b
fib(100)
4、递归函数
如果在函数体中有调用函数自身的代码,这就称为递归函数
例:
韩罗塔(hanoi)
'''
@Author :S1Lu
@Date :2022/10/21 11:10
'''
def f(n):
if n==0:
return 0
else:
return 2*f(n-1)+1
x=int(input("请输入片的个数:"))
print("需要移动",f(x),"次")
二 、形参与实参
1、形参和实参的定义
在函数定义时括号内时使用逗号分隔开的形参列表,在函数调用时向其传递实参,讲实参的引用传递给形参。(一个函数可以没有形参,说明这个函数不接收参数)
2、例
'''
@Author :S1Lu
@Date :2022/10/21 11:10
'''
def addOne(a): #形参a
print(a)
a += 1
print(a)
addOne(3) #给a传递参数
三、参数类型
1、默认值类型
1.1、定义
语法格式
def 函数名(...,形参名=默认值):
函数体
可以通过函数名.__defaults__
查看函数的所有默认值参数的当前值
1.2、例
'''
@Author :S1Lu
@Date :2022/10/21 11:10
'''
def f(a="a",b="b",c="c"):
return
print(f.__defaults__)
'''运行结果
('a', 'b', 'c')
'''
2、关键参数
2.1、定义
通过关键参数可以按参数名字传递实参,实参顺序可以和形参顺序不一致,但不影响参数的传递结果。
2.2、例
'''
@Author :S1Lu
@Date :2022/10/21 14:01
'''
def demo(a,b,c=5):
print(a,b,c)
demo(3,7) #位置参数a,b 参数c使用默认值
print("=========================================")
demo(c=8,a=9,b=0) #关键参数
'''运行结果
3 7 5
=========================================
9 0 8
'''
3、可变长度参数
3.1、定义
两种形式 ①
*parameter
②**parameter
,前者用来接收任意多个位置实参
并将其放在一个元组
中,后者接受关键参
数并将其放入字典
中
3.2、例
①*parameter
'''
@Author :S1Lu
@Date :2022/10/21 14:07
'''
def demo(*p):
print(p)
demo(1,2,3)
'''运行结果
(1, 2, 3)
'''
②**parameter
'''
@Author :S1Lu
@Date :2022/10/21 14:07
'''
def demo(**p):
for item in p.items():
print(item)
print(p)
demo(x=1,y=2,z=3)
'''运行结果
('x', 1)
('y', 2)
('z', 3)
{'x': 1, 'y': 2, 'z': 3}
'''
4、参数传递时的序列解包
4.1、定义
为含有多个形参的函数传递参数时,可以使用python列表、元组、集合、字典以及其他可以迭代的对象作为
实参
,并在实参名称前加一个星号
,python解释器将自动进行解包,然后传递
给对多个位置形参
,必须保证实参中的元素个数和形参个数相等
,否则会出现错误
4.2、例
①列表
'''
@Author :S1Lu
@Date :2022/10/21 14:12
'''
def demo(a,b,c):
print(a,b,c)
seq = [1,2,3]
demo(*seq)
'''运行结果
1 2 3
'''
②元组
'''
@Author :S1Lu
@Date :2022/10/21 15:12
'''
def demo(a,b,c):
print(a,b,c)
tup = (1,2,3)
demo(*tup)
'''运行结果
1 2 3
'''
③字典
键为参数
'''
@Author :S1Lu
@Date :2022/10/21 15:13
'''
def demo(a,b,c):
print(a,b,c)
dict = {'a':97,'b':98,'c':99}
demo(*dict) #以键为参数
'''运行结果
a b c
'''
值为参数
通过 两个星号或者使用values()方法
'''
@Author :S1Lu
@Date :2022/10/21 15:13
'''
def demo(a,b,c):
print(a,b,c)
dict = {'a':97,'b':98,'c':99}
demo(**dict) #以值为参数
'''运行结果
97 98 99
'''
'''
@Author :S1Lu
@Date :2022/10/21 15:13
'''
def demo(a,b,c):
print(a,b,c)
dict = {'a':97,'b':98,'c':99}
demo(*dict.values()) #以值为参数
'''运行结果
97 98 99
'''
键值对为参数
通过items()方法
'''
@Author :S1Lu
@Date :2022/10/21 15:13
'''
def demo(a,b,c):
print(a,b,c)
dict = {'a':97,'b':98,'c':99}
demo(*dict.items())
'''运行结果
('a', 97) ('b', 98) ('c', 99)
'''
四、return语句
return语句用来从函数中
返回
并结束函数
的执行
五、变量的作用域
1、全局变量
在函数中修改或声明全局变量要使用global
声明
2、局部变量
3、nonlical变量
在函数套函数中使用
例:
'''
@Author :S1Lu
@Date :2022/10/21 15:13
'''
def demo01():
x = "Bill"
def demo02():
nonlocal x
x = "hello"
demo02()
return x
print(demo01())
'''运行结果
hello
'''
六、lambda表达式
6.1、定义
用来声明匿名函数
6.2、例
'''
@Author :S1Lu
@Date :2022/10/21 17:19
'''
f = lambda x,y,z:x+y+z
'''运行结果
6
'''