python 函数
函数
函数可以理解为将需要重复利用的代码模块化,方便多次调用。
定义函数
运用def来定义一个函数;后面跟函数名;括号里可以为空,但是必不可少;末尾需要带冒号:。如def greet_user():;
向函数中传递信息
当需要函数来解决特定问题时,就需要向函数中传递信息:
def greet_user(name):
print(f"hello {name.title()}")
greet_user('jesse')
其中def greet_user(name):中的name称为形参,调用函数时的'jesse'称为实参。调用函数时会将实参的值赋给函数中的形参,以行使函数中的命令。
传递实参
当函数需要参数时,向函数内传递实参是必不可少的步骤。
实参的传递一般分为两种类型:
- 位置实参;
def names(first,last): print(f'hello {first.title()} {last.title()}') names('huang','jun')
调用函数names时,输入了两个实参:huang和jun,于是他们会按照位置顺序赋值给first和last。输出hello Huang Jun;但是如果两个实参位置反过来,输出就变成了hello Huang Jun。这种依赖实参位置赋值的实参称为位置实参。
2. 关键字实参
为了避免出现以上情况,我们可以指定我们输入的实参赋值给哪个形参:
def names(first,last):
print(f'hello {first.title()} {last.title()}')
names(last = 'jun',first = 'huang')
这样即使我们把位置搞混了,也可以顺利地输出我们想要的结果。
传递列表或字典时,或许你并不希望函数对原列表进行修改,但是又希望输出新列表,可以用``
def function_name(list_name(:))来将列表副本传递给函数
实参的默认值
在传递实参时,如果传递的多组实参有某个相同的参数,那么我们可以设置一个默认值
def names(first,last,middle=''):
"""由于大多数中国人都没有中间名,所以我们在没有输入中间名时默认中间名为空"""
print(f'hello {first.title()} {last.title()}')
返回值
很多时候我们需要函数帮我们做的不只是执行某个命令,我们希望它帮我们处理某些数据,方便我们后面使用,这时候就需要函数运行后给我们一个返回值。返回值可以是字典、列表、数、字符串等。
def names(first,last):
full_name = f'{first.title()} {last.title()}'
return full_name
my_name = names('huang','jun')
print(my_name)
我们调用函数names后它给我们返回了一个结果:Huang Jun,而后赋给了my_name变量,最后被打印出来。
传递任意数量的实参
有时候,我们不知道需要多少参数,输入多少我们就用多少。这时候我们就需要传递任意数量的实参。
def names(*name):
for n in name:
print(f"hello {n}")
names('Ben','Winie','Mage')
在形参name前加上*,使得传递进来的所有实参都被name接受形成元组。这种方法可以和位置实参结合,但是必须将*name放在最后来接收后来输入的所有实参。类似地**name两个星号创造一个字典而不是元组。
将函数存储在模块中并导入
函数的优点就是可以将代码块独立出主程序,增加可读性。我们可以进一步地将函数存储在模块文件中,方便调用和分享。
导入整个模块
模块是拓展名为.py的文件,在此文件中写了函数后,可以在其他程序中使用命令import xxx将此文件中的函数导入程序。在使用时用.function_name()的方法使用。
导入模块中的某个函数
若只想导入某个模块中的某个函数,可以用from module_name import function_name命令,如此在写程序时就不用xxxx.function_name的方法,可以直接用function_name()。
导入模块中的全部函数
使用星号*可以直接导入所有函数,但是这可能和原程序中的函数重名,导致bug,所以如果不是必要的情况不建议使用。
函数别名
如果导入的函数跟程序中的其他函数重名,我们可以给函数起个不一样的“外号”。
from module_name import function_name as another_name
类似地,用as也可以给模块起别名。

浙公网安备 33010602011771号