主要内容:
函数的定义
函数的调用
参数的传递方式
一、函数
1.1 函数的定义
-
函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。
-
函数能提高应用的模块性,和代码的重复利用率。
-
就像炒菜机可以封装好烹饪的各种步骤一样,函数也可以把我们要执行的代码放到一起,需要执行的时候,直接调用就可以。
方法一:
案例:平方函数,输入变量x返回其平方值x2
#定义函数
def test(a): #定义一个函数为test
z = a*a #函数执行语句
print(z) #函数返回值
#调用函数
test(5) #意思是a=5
方法二:
def a(x):
s=x*x
return s #表示函数
print(a(4))
#案例2
def test2(): #定义函数
print("你好")
test2() #调用函数
1.2 函数的格式
1.3 参数传递
-
几种参数设定方法:顺序传入,关键词,默认参数、不定长参数
-
函数默认按照输入参数列表的顺序传入
#顺序传参(s = 1+2*x+3*y+z*x+x*y)
def shunxu(x,y,z):
s = 1+2*x+3*y+z*x+x*y
return s
#按位置输出
print(shunxu(1,2,3))
#②关键字传入(s = 1+2*x+3*y+z*x+x*y)
def guanjian(x,y,z):
s2=1+2*x+3*y+z*x+x*y
return s2
print(guanjian(1,y=2,z=3))
print(guanjian(1,z=3,y=2))
print(guanjian(x=1 , y=2 , z=3)) #关键字顺序传入
#可以将位置和关键词的方法混合使用,
#如果传入的第一个参数是用关键词传入的,
#那么后面每个参数都需要是关键词传入,否则会出现语法错误。
#③默认参数传入
#输入的参数可以是事先设定好赋值,也就是默认值。在调动函数的时候,可以不输入参数,函数内部会直接调用默认参数值。例如默认z=3
def moren(x,y,z=3):
s3=1+2*x+3*y+z*x+x*y
print(s3)
return s3
moren(x=1,y=2)
#默认参数的默认值是可以修改的,将上面的z值传入设置为4,需要注意的是,默认参数必须放到参数列表的末位
moren(x=1,y=2,z=4)
————————————————————————————————————————————————————
#④不定长参数(*)
#案例一:不定长参数(引用多个函数)
def test(a,*b):
print(b)
print(b)
test(77,88,99)
————————————————————————————————————————————————————
#案例二:使用循环传参
def test2(c,*d):
r = 0
r += c
for x in d:
r += x
return r
t = test2(1,2,3)
print(t)
————————————————————————————————————————————————————
#案例三:使用循环传参
def test3(x,*y):
for i in y:
print(x+i)
return
print(test3(1,1,2,3))
————————————————————————————————————————————————————
#案例四:使用list列表传参
a =[1,2,3,4,5]
print(1,*a)
————————————————————————————————————————————————————
#④不定长参数(**)
#⑤不定长函数导入字典(**ags)
def test5(r,**dict5):
print("输出:") #
print(r) #输出r函数
print(dict5) #输出dict5中所有函数
test5(1,a=2,b=3) #调用test5函数
返回值为:
输出:
1
{'a': 2, 'b': 3}
————————————————————————————————————————————————————
#④不定长参数(**)(案例2)
def a(**b):
print(b)
a(a=1,b=2,c=True)
返回值:
{'a': 1, 'b': 2, 'c': True}
————————————————————————————————————————————————————
#⑥匿名函数
test = lambda z,x:z+100+x
print(test(1,2))
返回值:
103
1.4 匿名函数:
-
lambda的主体是一个表达式,而不是一个代码块。仅仅能在lambda表达式中封装有限的逻辑进去。
-
lambda函数拥有自己的命名空间,且不能访问自己参数列表之外或全局命名空间里的参数。
.png)
二、全局变量与局部变量
2.1 编写方法
-
定义在函数内部的变量拥有一个局部作用域,定义在函数外的拥有全局作用域。
-
局部变量只能在其被声明的函数内部访问,而全局变量可以在整个程序范围内访问:
-
Python中:模块(module),类(class)以及函数(def、lambda)都会引入新的作用域,其它的代码块(如if/elif/else/、try/except、for/while等)
-
是不会引入新的作用域的,也就是说这些语句内定义的变量,外部也可以访问。
方法/类的编写方法
class 类名称():
def 方法名/函数名称():
def 方法名/函数名称():
def 方法名/函数名称():
#方法编写案例(未实现)
#方法编写案例
class abc():
def aaa():
print("你今天真漂亮")
def bbb():
print("你真帅")
#调用
abc.aaa() #你今天真漂亮
abc.bbb() #你真帅
2.2 修改方法
-
当内部作用域想修改外部作用域的变量时,就要用到global和nonlocal关键字了。
#修改全局变量案例global
num = 1
def fun1():
global num #需要使用global关键字声明
print(num) #修改前参数值(1)
num = 123 #修改参数值
print(num) #修改后的参数值(123)
fun1() #调用方法
print(num) #调用参数值(123)
#修改嵌套作用域中的变量:
def outer():
num =10
def inner():
nonlocal num #nonlocal关键字声明
num = 100
print(num)
inner()
print(num)
outer()
本文首发于:③函数的使用方法2019年7月23日-焱讲
评论已关闭!