admin管理员组文章数量:1794759
Python 自学笔记(教程)(八)
Python 自学笔记(教程)(八)
- 定义函数
- 调用函数
- return 语句
- 变量作用域
- 传送门
- 课程
屏幕打印:
Python早上好
def pika1(): print('我最喜爱的神奇宝贝是皮卡丘') #该函数没有参数,直接调用函数名。记得英文括号一定不能少 pika1() def pika2(name): print('我最喜爱的神奇宝贝是'+name) #需要给参数name赋值,每次调用都可以给参数赋不同的值 pika2('皮卡丘') pika2('喷火龙') def pika3(name,person): print('我最喜爱的神奇宝贝是'+name) print('我最喜爱的驯兽师是'+person) #需要给两个参数分别赋值,并用逗号隔开,否则会报错 pika3('皮卡丘', '小智')屏幕打印:
我最喜爱的神奇宝贝是皮卡丘 我最喜爱的神奇宝贝是皮卡丘 我最喜爱的神奇宝贝是喷火龙 我最喜爱的神奇宝贝是皮卡丘 我最喜爱的驯兽师是小智
注意对应代码观察每一个输出 我们可以发现,当一个函数有多个参数时,调用时输入的参数是自动一一对应放入函数体的,就比如
def menu(appetizer, course): print('一份开胃菜:' + appetizer) print('一份主食:' + course) menu('牛肉拉面', '话梅花生') menu('话梅花生', '牛肉拉面')屏幕打印:
一份开胃菜:牛肉拉面 一份主食:话梅花生 一份开胃菜:话梅花生 一份主食:牛肉拉面
但是我们在调用函数的时候也可以将参数位置自定义,比如:
def menu(appetizer, course): print('一份开胃菜:' + appetizer) print('一份主食:' + course) #如果采用下面这种形式传递,就不需要理会参数位置 menu(course = '牛肉拉面', appetizer = '话梅花生')屏幕打印:
一份开胃菜:话梅花生 一份主食:牛肉拉面
同时我们在定义函数的时候还可以设置默认参数,在调用有默认参数的函数时可以不再输入默认参数,比如
def menu(appetizer, course, dessert = '绿豆沙'): print('一份开胃菜:' + appetizer) print('一份主食:' + course) print('一份甜品:' + dessert) menu('话梅花生', '牛肉拉面') #因为已经默认将'绿豆沙'传递给dessert,调用时无须再传递。屏幕打印:
一份开胃菜:话梅花生 一份主食:牛肉拉面 一份甜品:绿豆沙
虽然默认参数已经设置好了,但是也是可以改变的,比如:
def menu(appetizer, course, dessert = '绿豆沙'): print('一份开胃菜:' + appetizer) print('一份主食:' + course) print('一份甜品:' + dessert) menu('话梅花生', '牛肉拉面') menu('话梅花生', '牛肉拉面', '银耳羹') #银耳羹对应参数dessert屏幕打印:
一份开胃菜:话梅花生 一份主食:牛肉拉面 一份甜品:银耳羹
接下来介绍不定长参数,在定义函数时,需要在参数名前加一个*,使用方法及效果如下:
def menu(*barbeque): print(barbeque) menu('烤鸡翅', '烤茄子', '烤玉米') #这几个值都会传递给参数barbeque屏幕打印:
(‘烤鸡翅’, ‘烤茄子’, ‘烤玉米’)
注意:(‘烤鸡翅’, ‘烤茄子’, ‘烤玉米’)这其实也是一种数据类型,叫做元组,元组的写法是把数据放在小括号()中,它的用法和列表用法类似,主要区别在于列表中的元素可以随时修改,但元组中的元素不可更改
我们也可以先设置一个元组,再传入参数,比如
order = ('烤鸡翅', '烤茄子', '烤玉米') #元组的长度没有限制 def menu(*barbeque): print(barbeque) menu(*order)屏幕打印:
(‘烤鸡翅’, ‘烤茄子’, ‘烤玉米’)
遍历元组:
def menu(appetizer, course, *barbeque, dessert = '绿豆沙'): print('一份开胃菜:' + appetizer) print('一份主菜:' + course) print('一份甜品:' + dessert) for i in barbeque: print('一份烤串:' + i) menu('话梅花生', '牛肉拉面', '烤鸡翅', '烤茄子', '烤玉米')屏幕打印:
一份开胃菜:话梅花生 一份主食:牛肉拉面 一份甜品:绿豆沙 一份烤串:烤鸡翅 一份烤串:烤茄子 一份烤串:烤玉米
**注意:**这时候默认参数也需要放在不定长参数的后面,即dessert = '绿豆沙'要放在*barbeque后面,否则传递的值会对应不上
return 语句return是返回值,当你输入参数给函数,函数就会返回一个值,每个函数都会有返回值,函数内部一旦遇到return语句,就会停止执行并返回结果,没有return语句的函数,Python也会在末尾隐性地加上return None,即返回None值(return None可以简写为return)
#第一个函数 def fun(): a = 'I am coding' print(fun()) #第二个函数 def fun(): a = 'I am coding' return a print(fun())屏幕打印:
None I am coding
def niduoda(age): if age < 12: return '哈,是祖国的花朵啊' elif age < 25: return '哇,是小鲜肉呢' else: return '嗯,人生才刚刚开始' print(niduoda(30))屏幕打印:
嗯,人生才刚刚开始
函数返回的参数可以直接打印输出,也可以继续使用,也可以传入另外一个函数中,同时函数不止可以返回一个值,还可以返回多个值,比如:
def lover(name1, name2): face = name1 + '的脸蛋' body = name2 + '的身材' return face, body a = lover('李若彤', '林志玲') print('我的梦中情人:' + a[0] + ' + ' + a[1])屏幕打印:
我的梦中情人:李若彤的脸蛋 + 林志玲的身材
我们来理解一下最后一行代码,首先看一下依次返回的两个参数是什么数据类型:
def lover(name1, name2): face = name1 + '的脸蛋' body = name2 + '的身材' return face, body a = lover('李若彤', '林志玲') #此时return的值为元组 a = ('李若彤的脸蛋', '林志玲的身材')屏幕打印:
(‘李若彤的脸蛋’, ‘林志玲的身材’)
很明显这是一个元组,事实上,Python语言中的函数返回值可以是多个,而其他语言都不行,这是Python相比其他语言的简便和灵活之处,一次接受多个返回值的数据类型就是元组(tuple),而元组与列表其实都是数据的**“序列”**,元组取某个位置的值的操作,与列表是一模一样的
总结:
变量作用域比如:
x=99 #全局变量x def num(): x = 88 #局部变量x print(x) num() #打印局部变量x print(x) #打印全局变量x屏幕打印:
88 99
虽然变量的名字相同(都是x),但因为全局变量和局部变量处在不同的“变量作用域”中,建议局部变量和全局变量不要取相同的名字
**注意:**全局作用域中的代码中也不能使用任何局部变量,当变量处于被定义的函数内时,就是局部变量,只能在这个函数内被访问,当变量处于被定义的函数外时,就是全局变量,可以在程序中的任何位置被访问
如果你非要将局部变量变成全局变量,要用到一种新的语句global语句,比如:
def egg(): global quantity #global语句将变量quantity声明为全局变量 quantity = 108 egg() print(quantity)屏幕打印:
108
对比一下不同用法:
def egg(): quantity = 108 egg() print(quantity) #会报错,不能在函数外部(全局作用域)使用函数内的局部变量 quantity = 108 def egg(): print(quantity) egg() #函数内的局部作用域,可以访问全局变量 def egg(): global quantity quantity = 108 egg() print(quantity) #global语句可以将局部变量声明为全局变量 传送门Python 自学笔记(教程)(一) Python 自学笔记(教程)(二) Python 自学笔记(教程)(三) Python 自学笔记(教程)(四) Python 自学笔记(教程)(五) Python 自学笔记(教程)(六) Python 自学笔记(教程)(七)
课程我学习的课程
版权声明:本文标题:Python 自学笔记(教程)(八) 内容由林淑君副主任自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.xiehuijuan.com/baike/1686752298a98367.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论