python基础之函数式编程
2020-12-13 13:46
标签:col 计算 ace demo 调用 中国 统计 上网 元祖 1、定义:函数是指将一组语句的集合通过一个名字(函数名)封装起来,要想执行这个函数,只需调用其函数名即可 2、特性: (1)减少重复代码; (2)使程序变的可扩展; (3)使程序变得易维护。 3、函数的分类 (1)内置函数:为了方便我们的开发,针对一些简单的功能,python解释器已经为我们定义好了的函数即内置函数。对于内置函数,我们可以拿来就用而无需事先定义,如len(),sum(),max() (2)自定义函数:很明显内置函数所能提供的功能是有限的,这就需要我们自己根据需求,事先定制好我们自己的函数来实现某种功能,以后,在遇到应用场景时,调用自定义的函数即可。 例子:打印佛祖 1、定义函数 格式: 注意:函数名要能反映其意义 demo: 注意:函数在定义阶段只检测语法,不执行代码 也就是说,语法错误在函数定义阶段就会检测出来,而代码的逻辑错误只有在执行时才会知道。 2、调用函数 定义了函数之后,就相当于有了一个具有某些功能的代码,想要让这些代码能够执行,需要调用它调用函数很简单的,通过 函数名() 即可完成调用 函数的调用:先找到名字,根据名字调用代码(函数名加括号) 3、分析函数的执行过程 (1)回顾程序执行的三种流程 顺序执行、选择执行、循环执行 (2)函数的执行过程 4、定义多个函数 5、定义函数的三种形式 (1)无参:应用场景仅仅只是执行一些操作,比如与用户交互、打印 (2)有参:需要根据外部传进来的参数,才能执行相应的逻辑,比如统计长度,求最大值最小值 (3)空函数:设计代码结构 pass,什么也不做,占位用 结论: (1)定义时无参,意味着调用时也无需传入参数 (2)定义时有参,意味着调用时则必须传入参数 1、形参变量只有在被调用时才分配内存单元,在调用结束时,即刻释放所分配的内存单元。因此,形参只在函数内部有效。函数调用结束返回主调用函数后则不能再使用该形参变量(在定义阶段函数名称括号内的参数叫做形参,可以给默认值) 2、实参可以是常量、变量、表达式、函数等,无论实参是何种类型的量,在进行函数调用时,它们都必须有确定的值,以便把这些值传送给形参。因此应预先用赋值,输入等办法使参数获得确定值(在执行阶段传入的参数叫做实参,可以是位置参数,也可以以键值对的形式传参,还可以传入函数的执行结果) 3、默认参数 发现 country 这个参数 基本都 是"CN", 就像我们在网站上注册用户,像国籍这种信息,你不填写,默认就会是 中国, 这就是通过默认参数实现的,把country变成默认参数非常简单 这样,这个参数在调用时不指定,那默认就是CN,指定了的话,就用你指定的值。 4、关键参数 正常情况下,给函数传参数要按顺序,不想按顺序就可以用关键参数,只需指定参数名即可,但记住一个要求就是,关键参数必须放在位置参数之后。 5、非固定参数(*args-元组;**kwargs-字典) 若函数在定义时不确定想传入多少个参数,就可以使用非固定参数 还可以有一个**kwargs 6、全局与局部变量 要想获取函数的执行结果,就可以用return语句把结果返回 注意: 注意:每次调用一次函数的时候都会从函数最开始的地方执行。想做到用生成器(yiled) 4种函数的类型: 无参数,无返回值;无参数,有返回值;有参数,无返回值;有参数,有返回值 python基础之函数式编程 标签:col 计算 ace demo 调用 中国 统计 上网 元祖 原文地址:https://www.cnblogs.com/renyz/p/11537424.html一、函数的定义
1 def print_buddha(): #def 函数名():定义函数名和变量名一样
2 print(" _ooOoo_ ")
3 print(" o8888888o ")
4 print(" 88 . 88 ")
5 print(" (| -_- |) ")
6 print(" O\\ = /O ")
7 print(" ____/`---‘\\____ ")
8 print(" . ‘ \\| |// `. ")
9 print(" / \\||| : |||// \\ ")
10 print(" / _||||| -:- |||||- \\ ")
11 print(" | | \\\\\\ - /// | | ")
12 print(" | \\_| ‘‘\\---/‘‘ | | ")
13 print(" \\ .-\\__ `-` ___/-. / ")
14 print(" ___`. .‘ /--.--\\ `. . __ ")
15 print(" ."" ‘_/___.‘ >‘"". ")
16 print(" | | : `- \\`.;`\\ _ /`;.`/ - ` : | | ")
17 print(" \\ \\ `-. \\_ __\\ /__ _/ .-` / / ")
18 print(" ======`-.____`-.___\\_____/___.-`____.-‘====== ")
19 print(" `=---=‘ ")
20 print(" ")
21 print(" ............................................. ")
22 print(" 佛祖镇楼 BUG辟易 ")
23 print(" 佛曰: ")
24 print(" 写字楼里写字间,写字间里程序员; ")
25 print(" 程序人员写程序,又拿程序换酒钱。 ")
26 print(" 酒醒只在网上坐,酒醉还来网下眠; ")
27 print(" 酒醉酒醒日复日,网上网下年复年。 ")
28 print(" 但愿老死电脑间,不愿鞠躬老板前; ")
29 print(" 奔驰宝马贵者趣,公交自行程序员。 ")
30 print(" 别人笑我忒疯癫,我笑自己命太贱; ")
31 print(" 不见满街漂亮妹,哪个归得程序员?")
32 print_buddha() #执行函数,加()就是执行,不加()打印的是函数的内存地址
二、函数的定义和调用
#语法def 函数名(参数1,参数2,参数3,...):
‘‘‘注释‘‘‘
函数体
return 返回的值
def print_name(): #定义函数
print(‘-----------------------------‘) #代码块
print(‘my name is renyz.‘)
print(‘-----------------------------‘)
print_name() #调用函数
# 定义函数
def print_info(): # 1、程序从第一行开始执行,发现定义一个函数print_info
# 函数功能代码
print ("-"*50) # 3、开始依次执行代码
print("名片管理系统...")
print ("人生苦短,我用python")
print(" 1:登录")
print(" 2:退出")
print ("-" * 50) # 4、执行到这一步,从哪里进去的从哪里出去
# 调用函数
print_info() # 2、加括号代表执行 # 最后函数print_info走到这里 开始调用里面的函数。
1 def auth():
2 name = input(">>>:").strip()
3 password = input("passwd>>>:").strip()
4 if name == "test" and password == "123":
5 print("login successfull")
6 else:
7 print("user or password error")
8 auth()
1 def my_max(x,y):
2 if x > y:
3 print(x)
4 else:
5 print(y)
6 my_max(1,3)
1 def placeholder():
2 pass
三、函数的参数与局部变量
def sum(x,y): #x,y为形参
print(x)
print(y)
sum(10,20) #10,20代表实参
def stu_register(name, age, country, course):
print("注册学生信息".center(25,‘-‘))
print("姓名:", name)
print("age:", age)
print("国籍:", country)
print("课程:", course)
stu_register("王小二", 22, "CN", "python_devops")
stu_register("张吃货", 21, "CN", "linux")
stu_register("刘老根", 25, "CN", "linux")
def stu_register(name, age, course, country=‘CN‘):
def stu_register(name, age, *args): # *args 会把多传入的参数变成一个元组形式
print(name, age, args)
stu_register("Renyz", 22)
# 输出
# Renyz 22 () #后面这个()就是args,只是因为没传值,所以为空
stu_register("Jack", 32, "CN", "Python")
# 输出
# Jack 32 (‘CN‘, ‘Python‘)
1 def stu_register(name, age, *args, **kwargs): # *kwargs 会把多传入的参数变成一个dict形式
2 print(name, age, args, kwargs)
3 stu_register("Renyz", 18)
4 # 输出
5 # Renyz 18 () {}#后面这个{}就是kwargs,只是因为没传值,所以为空
6 stu_register("Jack", 22, "CN", "Python", sex="Male", province="ShanDong")
7 # 输出
8 # Jack 22 (‘CN‘, ‘Python‘) {‘province‘: ‘ShanDong‘, ‘sex‘: ‘Male‘}
1 name = "Renyz"
2 def change_name(name):
3 print("Old name:", name)
4 name = "任彦忠"
5 print("Change name:", name)
6 change_name(name)
7 print("在外面看看变量name改了么?", name)
8 -----------------------------------------------------------
9 Old name: Renyz
10 Change name: 任彦忠
11 在外面看看变量name改了么? Renyz
#内置名称空间:(python启动时就有)python解释器内置的名字,print,max,min
#全局名称空间:(执行python文件时启动)定投定义的变量
#局部名称空间:(调用函数时启动,调用结束失效)函数内部定义的变量
# 总结:三者的加载顺序
# 内置 --->全局 - -->局部
# 三者的访问顺序
# 局部 --->全局 - -->内置
四、返回值
1 def test():
2 a = 11
3 b = 12
4 c = 33
5 # return a
6 # return b
7 # return c #无法调用多个值
8 #调用多个值得方法:
9 # 第1种 ,用一个列表来封装3个变量的值
10 # d = [a,b,c]
11 # return d
12 # 第2种,第一种的另外写法
13 # return [a,b,c]
14 # 第3种 封装到元祖里面返回
15 return a,b,c
16 num = test()
17 print (num)
18 # return隐藏的功能结束函数的执行
无return->None;return 1个值->返回1个值;return 逗号分隔多个值->元组
什么时候该有返回值?
调用函数,经过一系列的操作,最后要拿到一个明确的结果,则必须要有返回值
通常有参函数需要有返回值,输入参数,经过计算,得到一个最终的结果
什么时候不需要有返回值?
调用函数,仅仅只是执行一系列的操作,最后不需要得到什么结果,则无需有返回值
通常无参函数不需要有返回值
def 函数名():
pass
def 函数名():
return xxx
def 函数名(参数):
pass
def 函数名(参数):
return xxx
五、嵌套函数
六、递归函数
七、匿名函数
八、函数式编程
九、高阶函数
十、内置函数