文章目录
1. 函数的定义
- 使用def定义函数,如下:
def Hello():
print('Hello World!')
Hello()
- def是用来定义函数的
- 'Hello’是函数名
- '( )'中是用来放参数(形参和实参)的
- ':'之后的所有缩进行构成了函数体,指出了这个函数需要完成怎样的工作
- 调用函数的时候,只需要传递相应参数和指出函数名即可
2. 实参和形参
def Hello(string):
print(string)
s = 'Hello World'
Hello(s)
- 在上边这个函数中,其中括号中的变量’string’就是形参,而下边的变量’s’就是实参,实参给形参传递了信息。
3. 传递实参的方法
3.1 位置实参
- 在调用函数的时候,每一个实参需要关联一个形参,因此,最简单的关联方法就是通过实参的顺序,这种关联方法叫做位置实参
def Hello(string1, string2):
print(string1 + string2)
Hello('Hello', 'World!')
> 输出:
HelloWorld!
3.2 关键字实参
- 关键字实参方法就是通过指定形参关联实参。
def Hello(string1, string2):
print(string1 + string2)
Hello(string2='Hello', string1='World!')
> 输出:
World!Hello
3.3 默认值
- 在编写函数时,可以给形参指定默认值。
- 在调用函数时,若给该具有默认值的形参提供实参时,则使用实参值;否则将使用默认值。
def Hello(string1, string2='World!'):
print(string1 + string2)
Hello('Hello')
> 输出:
HelloWorld!
3.4 等效的函数调用
- 通过3.3的例子就可以发现,实参传递的方法时可以混合是可以混合使用的。
def Hello(string1, string2='World!'):
print(string1 + string2)
# 你好世界!
Hello('Hello')
Hello(string1='Hello')
# 我的手
Hello(string1='My', string2='hand')
Hello(string2='hand', string1='My')
Hello('My', 'hand')
- 这些调用函数的方式都是有效且等效的
4. 传递实参的应用
4.1 禁止函数修改列表
- 为防止传递的列表被改变,可以这样做:
def function_name(list_name[:])
- 切片表示法[:]相当于创建了一个列表的临时副本,这样在函数中使用的列表则不是真正的实参列表。
4.2 传递任意数量的实参
- 有时候,你预先不知道函数需要接受多少个实参,好在Python允许函数函数从调用语句中收集任意数量的实参。
- 例如,来看一个制作披萨的函数,它需要接受很多配料,但你无法预先确定顾客要多少种配料。
def make_pizza(*toppings):
print(toppings)
make_pizza('peperono')
make_pizza('mushrooms', 'green pepers', 'extra cheese')
> 输出:
('peperono',)
('mushrooms', 'green pepers', 'extra cheese')
-
形参让python创建了一个名为toppings的空元组,并会将收到的所有值都封装到这个元组里。
-
python的形参不仅仅可以创建一个空元组,还可以创建一个空字典,看下面的例子:
def concat_name(**name):
print(name)
concat_name(student_0='marry')
concat_name(student_1='john', student_2='mike')
> 输出:
{'student_0': 'marry'}
{'student_1': 'john', 'student_2': 'mike'}
- 这里需要注意的一点是在调用函数的时候,键-值对的键不需要加引号
5. 将函数存储到模块中
1. 模块的创建
- 模块是扩展名为.py的文件,包含要导入到程序中的代码。下面来创建一个包含函数make_pizza()的模块。为此我们要将该文件中除函数外的其他代码都删除:
# pizza.py
def make_pizza():
print("this is a pizza.py!")
2. 模块的导入
导入 | 使用 | 描述 |
---|---|---|
import pizza | pizza.make_pizza() | 导入整个模块 |
from pizza import make_pizza | make_pizza() | 导入特定的函数 |
from pizza import make_pizza as mp | mp() | 给导入的函数指定别名 |
import pizza as p | p.make_pizza() | 给导入的模块指定别名 |
from pizza import * | make_pizza() | 导入模块中所有函数 |