函数

当一个程序需要多次执行时,我们不需要反复重写程序,只需要将该程序封装成函数即可。

定义函数

例:定义一个打印问候的函数

def get_hello():#定义函数使用def  + 函数名+ 所需的参数+:

print('hello')

get_hello()#d调用

通过以上代码我们可知,使用关键字 def 定义函数,然后定义函数的函数名为get_hello,后面跟着(),括号中还可以添加参数(如果不需要参数,括号内可以为空),最后以结尾。

调用函数,我们需要使用函数名+()+所需的参数进行调用,此时函数打印hello

向函数中添加参数

我们只需要做一些修改,就可以使用函数不仅仅打印hello。

例:我们向函数添加一个用户名参数,这时调用函数,可以打印向谁问候的内容

def get_hello(username ):

print('hello'+" " + username +'!')

get_hello('张三')

实参和形参

上面事例中,我们定义函数时,要求给usename指定一个值,函数才能调用。这个username是一个形参。而我们调用函数get_hello中"张三"是实参,这个实参在调用时被存储到形参username中。

注意:有时候大家可能会形参,实参不分,所以还是多注意

传递实参

函数中可能会包含多个实参,因此调用函数中也可能包含多个实参。这时我们可以使用位置实参,这要求实参的顺序与形参的顺序一致,也可以使用关键字实参,其中每个实参都是由变量名和值组成。

位置实参

调用函数时,我们需要将实参全部关联到函数中定义的形参中,最简单的关联方式是按照实参的顺序。

例:根据函数的形参位置顺序,我们传递实参进行关联

def get_hello(name,age):

print(name + age +"欢迎你")

get_hello('张三','12')

多次调用函数

我们定义后的函数,可以多次调用,我们只需要传递不同的值,函数就可以打印结果

例:

def get_hello(name,age):

print(name + age +"欢迎你")

get_hello('张三','12')

get_hello('李四','15')

注意:位置实参的顺序很重要,如果将顺序输入错误,结果会出乎意料

例:

def get_hello(name,age):

print(name + age +"欢迎你")

get_hello('12','赵六')#将年龄和姓名位置放错,打印出的结果也是错的

关键字实参

关键字实参是传递给函数关键字名称和值。直接可以在实参中将名称和值关联。因此不用考虑实参的顺序。

例:

def get_hello(name,age):

print(name + age +"欢迎你")

get_hello(age='12',name='王五')

注意:使用关键字实参时,务必准确的指定函数定义中的形参名

默认值

编写函数时,可以给每个形参指定默认值。如果函数调用时,指定了实参则使用新的指定实参,未指定实参则使用默认值。

例:

def get_hello(age,name='张三'):

print(name + age +"欢迎你")

get_hello('12')

get_hello('12','赵')#有默认值得参数需要放在最后

get_hello('赵','12')#如果位置放错了,打印结果也是错的

注意:使用默认值时,在形参列表中必须先列出没有默认值的形参,再列出有默认值的参数。这样python依然能够正确地解读位置参数。

返回值

函数并非总是直接显示输出,相反,函数可以处理一些数据,并返回一个或一组值。这个函数返的值被称为返回值。在函数中,return语句将值返回调用函数的代码行

例:

def sum(num1,num2):#定义一个求和函数

num3 = num1+num2#结果存储到num3中

return  num3#返回求取的值

a= sum(1,2)#调用函数将返回结果存储到a中

print(a)

注意:又返回值得函数需要用变量接收返回值

有时候需要将实参变为可选参数,这样使用函数的人可以提供额外的信息。

例:我们定义了一个函数,可以接收开始名称,结束名称,中间名称,我们将中间名称设置为默认名称,如果需要赋新的实参,在调用函数时给出新实参。有默认实参的形参放在最后

def get_hello(first_name,last_name,middle_name=''):#

print(first_name+ last_name+ middle_name +'欢迎你')

get_hello('张','三')#没有赋值新的实参的情况下,默认形参为空

get_hello('张','三','老') #有赋值新的实参的情况下,打印为新的实参

返回字典

函数可以返回任何类型的值,包括列表和字典等较为复杂的数据结构。

例:

def build_name(first_name,last_name):

name = {'first_name':first_name,'last_name':last_name}

return name

a = build_name('张','三')

print(a)

使用函数和while循环结合

例:我们创建一个函数,函数将返回完整的姓名,再使用while循环进行问候

def build_name(first_name,last_name):

name = first_name + last_name

return name.title()

while True:

first_name =input('first_name')

last_name =input('last_name')

name1 = build_name(first_name,last_name)

print(name1 +'欢迎')

传递列表

向函数传递列表很有用,列表可以包含名字,数字或者更加复杂的对象(如:字典)

例:假设有一个用户列表,我们要问候其中的每一位用户。

users = ['george','lili','jack']

def get_hello(name):

for iin name:

print(i +'你好')

get_hello(users)

在函数中修改列表

将列表传递给函数后,函数就可以对其进行修改。在函数中对这个列表进行的修改就是永久的。

例:有一英雄池列表, 移动到另一个我的英雄池列表中,然后打印出我的英雄池

heros = ['亚瑟','安琪拉','李白']

my_heros = []

while heros:

hero = heros.pop()

my_heros.append(hero)

print(my_heros)

for iin my_heros:

print(i)

改为函数:创建两个函数,一个函数用来转换新列表,一个函数用来打印英雄

def zhuan_hero(heros,my_heros):

while heros:

hero = heros.pop()

my_heros.append(hero)

def print_hero(my_heros):

print(my_heros)

for iin my_heros:

print(i)

heros = ['亚瑟','安琪拉','李白']

my_heros = []

zhuan_hero(heros,my_heros)

print_hero(my_heros)

禁止函数修改列表

如果我们不希望函数改变原始的列表内容。我能可以使用切片进行操作,因为切片会将列表创建一个副本进行操作

例:

def zhuan_hero(heros,my_heros):

while heros:

hero = heros.pop()

my_heros.append(hero)

def print_hero(heros,my_heros):

print(my_heros)

print(heros)

for iin my_heros:

print(i)

heros = ['亚瑟','安琪拉','李白']

my_heros = []

zhuan_hero(heros[:],my_heros)

print_hero(heros[:],my_heros)

传递任意数量的实参

有时候,我们预先不知道函数需要接受多少个实参,Python语句提供了可以收集任意数量的实参。

例:

英雄有很多装备,这时候我们不知道所选的英雄装备,所以我们可以使用*参数,进行接收实参

def get_equ(*name):

print(name)

get_equ('无尽','饮血','红叉')

结合使用位置实参和任意数量实参

例:此操作会把位置实参传递,剩下的所有参数被任意参数实参接收。

def get_equ(size,*name):

print(size,name)

get_equ(6,'无尽','饮血','红叉')

注意:位置实参需要在任意实参之前。

使用任意数量的关键字实参

如果我们不知道需要接收的实参数量。这种情况下可以将函数编写成能够接收任意数量的键值对,调用语句提供了多少就可以接收多少。

例:

def get_name(first_name,last_name,**name):

full_name ={}

full_name['first_name'] = first_name

full_name['last_name'] =last_name

for key,valuein name.items():

full_name[key] = value

return full_name

a= get_name('张','3',first_name1='李',last_name1='四')

print(a)

将函数存储到模块中

函数的优点之一就是他们可以将代码块与主程序分离。通过给函数指定描述性名称。将函数存储在被称为模块的独立文件中。再将模块导入到主程序中,import语句允许在当前运行的程序文件中使用模块代码。

导入整个模块

先创建模块,模块是扩展名为.py的文件,包含要导入到程序中的代码。

导入方式一:直接import 文件名,会将该文件中的所有函数全部导入到当前程序中

导入方式二:使用from 文件名 import 函数名,会将指定函数导入到当前程序中

导入方式三:使用from 文件名 import 函数名 as 别名,将指定函数重新起名在当前程序中使用

导入方式四:使用from 文件名 import  *会将该文件中的所有函数全部导入到当前程序中

顶顶顶

你可能感兴趣的:(函数)