函数
定义函数
定义
定义函数用def
语句。
def greet(): #定义了一个问候的函数
print("Hello!")
greet()
向函数传递参数
在函数的括号内设置相关参数。
def greet(name):
print("Hello! "+name+"!")
name = input("Please input your name:")
greet(name)
形参和实参
上面程序中,def greet(name)
中的name
就是形参,而最后一行greet(name)
的name
就是实参。
传递实参
位置实参
直接根据函数名中参数的位置来传递实参。函数按顺序把实参传递给函数,如果顺序改变就会使参数传递出错。
下面是一个描述一个人信息的程序。
def describe(name,age):
print(name+" is "+age+".")
user_name=input("Please input your name:")
user_age=input("Please input your age:")
describe(user_name,user_age)
describe(user_age,user_name) #调整顺序
'''
结果:
Please input your name:Rick
Please input your age:19
Rick is 19.
19 is Rick.
'''
关键字实参
关键字实参可以不受顺序限制。
def describe(name,age):
print(name+" is "+age+".")
user_name=input("Please input your name:")
user_age=input("Please input your age:")
describe(name=user_name,age=user_age)
describe(age=user_age,name=user_name) #调整顺序
'''
结果:
Please input your name:Rick
Please input your age:19
Rick is 19.
Rick is 19.
'''
默认值
在定义函数的时候可以给形参设置默认值,如果没有实参传递进来,则这个形参就会变成默认值。
def describe(name='xxx',age='xx'):
print(name+' is '+age+'.')
name='Rick'
age='19'
describe(name=name)
describe(age=age)
'''
结果:
Rick is xx.
xxx is 19.
'''
返回值
在定义函数时,在函数的最后可以用return
语句让函数返回一个值(也可以是字典、列表等变量类型)。
def fullname(firstname,lastname):
fullname=firstname+'-'+lastname
return fullname.title() #让函数返回一个字符串
while True:
firstname=input("Please input your firstname(input q to quit):")
if firstname=='q':
break
lastname=input("Please input your lastname(input q to quit):")
if lastname=='q':
break
print(fullname(firstname,lastname))
'''
结果:
Please input your firstname(input q to quit):chris
Please input your lastname(input q to quit):evens
Your fullname is: Chris-Evens.
Please input your firstname(input q to quit):q
'''
def fullname(firstname,lastname):
person={'first':firstname,'last':lastname}
return person #让函数返回一个字典
print(fullname(firstname='Chris',lastname='Evens'))
'''
结果:
{'first': 'Chris', 'last': 'Evens'}
'''
传递列表
向函数传递列表没有什么特别的方法,只是函数的参数为列表而已。
在函数中修改列表
将列表传递给函数后,在函数中可以对它进行修改,这些修改均是永久性的。类似于C语言的函数中对数组的修改。
def func(list):
list[-1]='null'
fruits = ['apple','banana','peach']
print(fruits)
func(fruits)
print(fruits)
'''
结果:
['apple', 'banana', 'peach']
['apple', 'banana', 'null']
'''
禁止函数修改列表
如果想要函数不改变实际列表的值,可以在向函数传递列表时仅传递列表的副本,如fruits[:]
。
def func(list):
list[-1]='null'
fruits = ['apple','banana','peach']
print(fruits)
func(fruits[:])
print(fruits)
'''
结果:
['apple', 'banana', 'peach']
['apple', 'banana', 'peach']
'''
传递任意数量的实参
在函数的形参名前面加一个*
,这时Python就会创建一个空的元组,并将收到的所有值都存在这个空元组中。
def func(*fruits):
print(fruits)
func('pear')
func('apple','banana')
'''
结果:
('pear',)
('apple', 'banana')
'''
在函数的形参名前面加两个*
,这时Python就会创建一个空的字典,并将收到的所有名称-值对(关键字实参)都存在这个字典之中。
def func(**user_info):
print(user_info)
func(name='Rick',location='ChongQing')
'''
结果:
{'location': 'ChongQing', 'name': 'Rick'}
'''
将函数存储在模块中
导入模块及其中函数
函数可以储存在被称为模块的独立py文件中。可以使用import
语句来使用模块中的代码。
导入整个模块:import + 文件名
,此时若要使用函数需要写成模块名.函数名()
。
导入模块中特定函数:from + 模块名 + import + 函数名1(无括号),函数名2,……
。这种情况下使用函数就只用指定其名称即可,不用再在前面加入模块名。
导入模块中所有函数:from + 模块名 + import + *
。
使用as
给函数和模块指定别名
给函数指定别名:from + 模块名 + import + 函数名1 + as + 别名
。
给模块指定别名:import + 模块名 + as +别名
。