函数名(参数1, 参数2, ... , 参数n):
函数体
return 语句
#函数名:最好是取体现函数功能的名字,一般用小写字母和单下划线、数字等组合
def greet(name):
#参数:根据函数功能,括号里可以有多个参数,也可以不带参数,命名规则与函数名相同
#规范:括号是英文括号,后面的冒号不能丢
print(name + '早上好')
#函数体:函数体就是体现函数功能的语句,要缩进,一般是四个空格
return
函数名(参数)
def greet(name):
print(name + '早上好')
return
# 开始调用
greet('Python')
屏幕打印:
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
语句的函数,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 自学笔记(教程)(七)
我学习的课程