Python函数式编程
一、函数的定义
定义:所谓函数,就是把重复的代码单独的分离出来,放在⼀个公共的地⽅,便于以后可以⼀直的进⾏调⽤,这样就可以解决多次重复来编写。
函数使用的关键字是def
定义函数格式如下:
def 函数名(): 代码
二、函数的参数
1、形式参数:是指定当以函数的时候小括号里面的参数,用来接收参数用的。
1 def add(a,b):#这个add(a,b)函数中a和b就是形式参数。 2 print(a+b) 3 add(a=1,b=2) 4 add(1,2)
运行结果如下:
3
3
Process finished with exit code 0
2、函数的形式参数也可以是函数。很重要!!
铺垫:一切皆对象,案例演示如下:
1 def func(): 2 print("Hello Python!") 3 obj=func 4 obj()
运行结果如下:
Hello Python!
Process finished with exit code 0
函数的形式参数也可以是函数。
第一种:
1 def func1(): #1 2 print("Hello Python!") #5 3 def func2(f1): #2 这里func2(f1)函数中f1是形式参数,且f1()也是函数。 4 return f1() #4 5 func2(f1=func1) #3
运行结果如下:
Hello
Process finished with exit code 0
第二种:
1 def func1(): #1 2 print("Hello Python!") #4 3 def func2(f1): #2 4 return f1 #5 5 func2(f1=func1()) #3
运行结果如下:
Hello
Process finished with exit code 0
3、实际参数:指的是“调用”函数的时候,给形式参数赋予的值。
1 def add(a,b=2): 2 print(a+b) 3 add(3) 4 add(2,6)#在调用add(2,6)函数的时候,我们重新给形式参数a赋值2,b赋值6。
运行结果如下:
5
8
Process finished with exit code 0
其中下面这种是错误的语法赋值。
1 def add(a=2,b):#不符合语法 2 print(a+b) 3 add(3)
运行结果如下:
def add(a=2,b):#不符合语法 ^ SyntaxError: non-default argument follows default argument Process finished with exit code 1
4、默认参数:指的是在“定义”函数的时候,可以给形式参数指定具体的值。
1 def login(username="lucy",passworld=12345):
#在定义函数中,我们给形式参数username和password,指定了具体的值Lucy和1234,这就叫默认参数。 2 if username=="lucy" and passworld==1234: 3 print("登陆成功!") 4 else: 5 print("登陆失败!") 6 login()
运行结果如下:
登陆失败!
Process finished with exit code 0
三、函数的返回值
所谓“函数的返回值”就是在程序中函数完成一件事情后,最后给调用者的结果。
A、使用的关键字是return。
B、在一个函数里,如果有return,那么函数的返回值就是return后面的内容。
C、如果一个函数没有return关键字,那么函数的返回值是None。
D、一个函数可以有多个返回值,但是只要有一个return语句被执行到,那么这个函数就会结束,因此后面的return就不再起作用。
返回值的作用:
1、在单个函数的角度而言,函数写不写return,其实都没有太大的价值。
2、通过返回值可以将函数与函数之间建立关联关系。
建立关系案例一:
1 def login(username="lucy",passworld="admin"): 2 if username=="lucy" and passworld=="admin": 3 return True 4 else: 5 return False 6 # 通过返回值可以把login()函数与profile()函数之间能够建立关联关系 7 def profile(): 8 if login()==True: 9 # if login() : #与上面的等价 10 print("查看个人主页信息") 11 else: 12 print("请登录") 13 profile()
运行结果如下:
查看个人主页信息
Process finished with exit code 0
建立关系案例二:
1 def getUserInfo(): 2 username=input("请输入您的帐户名:\n") 3 passworld=input("请输入您的密码:\n") 4 return username,passworld #一个函数返回多个数据的方式 5 def loginNiBi(): 6 username,passworld=getUserInfo() #得到用户的账号和密码 7 if username=="lucy" and passworld==1234: 8 passworld("登陆成功!") 9 else: 10 print("账户或者密码错误!") 11 loginNiBi()
运行结果如下:
请输入您的帐户名: Rose 请输入您的密码: 1234 账户或者密码错误! Process finished with exit code 0
四、函数的变量
1、全局变量:在一个Python文件中定义的变量叫全局变量。就是该变量既可以在一个函数中使用,也能在其他函数中使用。
a:全局变量能够在所有的函数中进行访问。
2、局部变量:在函数内部定义的变量叫局部变量。
a:其作用范围是在这个函数内部,即只能在这个函数中使用,在函数的外部时不能使用的。
b:它是为了临时保存数据需要在函数中定义变量来进行存储。
c:当函数调用时,局部变量被创建,当函数调用完成后,这个变量就不能够使用了。
优先级:
A:在Python文件中调用变量,全局变量的优先级是高于局部变量
B:在函数内部,局部变量的优先级是高于全局变量的
1 language="Python语言" #全局变量 2 def func(): 3 language="Java语言" #局部变量 4 print(language) 5 func() 6 print(language)
当函数内出现局部变量和全局变量相同的名字,比如本例中变量名都是"language",那么函数内部的中的变量名=数据,此时理解为定义了一个局部变量,而不是修改全局变量。
运行结果如下:
Java语言
Python语言
Process finished with exit code 0
五、函数的调用
1、函数定义后,必须要进行调用,不调用函数不会被执行。
2、函数调用的方式:
A、直接调用函数
B、主函数中调用函数(主函数可以理解为程序执行的入口)在python中可以是在主函数中调用,也可以不,比较自由。
1 language="Python语言" 2 def func(): 3 language="Java语言" 4 print(language) 5 func() #函数的调用 6 print(language) 7 func() #函数的调用
运行结果如下:
Java语言
Python语言
Java语言
Process finished with exit code 0
3、在函数内部如果想要调用全局的同时又想调用全局变量的值,那么使用关键字global。
1 language="Python语言" 2 def func(): 3 global language #global引用全局变量,一般不会轻易修改这个变量的值 4 print(language) 5 func()
运行结果如下:
Python语言
Process finished with exit code 0