第八章、函数
一、定义函数
#定义函数
def 函数名():
函数体
#使用函数
函数名()
函数名命名的注意点:
- 遵从变量命名的要点
- 不能数字开头
- 小驼峰命名发
1.实参和形参
def dong(name): print('我的名字是' + name) dong('hehe')
**
形参:
**在上面的定义函数的代码中, 括号里的那个参数没有真实的含义,只是让大家知道,这里应该放一个参数。**
实参:
**在上面使用函数的代码中,括号里面传入的字符串就是实参,这个参数被存放在形参name中。
2.位置实参
故名思意,传入实参的位置要与我们定义的形参的位置所对应,这个也是我们最常见的传参方式,再此不多做解释。
3.关键字实参
不考虑闯入参数时实参的顺序:我们在传入的时候,就对指定的形参指定具体的值,这样就不用顾及传入参数的顺序啦。
def dong(name, age, city): print('来自' + city '的' + name + '今年已经' + age '岁了') #位置实参的方式传入参数,需要注意参数的位置 dong('张三', 13, '北京') #关键字实参传入参数,不需要注意参数的位置,就算传入时位置与形参不同,也不影响输出结果 dong(age=13, city='上海', name='李四')
4.默认值
**
作用:
**我们在定义函数的时候可以给一些参数设置默认值,在后面调用函数的时候,我们如果没有给设定了默认值的参数赋值,那么这个参数的值就是默认值。
- 默认值参数在定义时一般放在末尾,因为,我们一般使用的时位置实参
- 设置了默认值的参数在调用时可以不给这个参数赋值
- 没有设置默认值的参数,在调用时必须给相关的参数赋值,不然会报错
二、返回值
三、传递列表
1.在函数中修改列表
将列表传递给函数后,函数就可以对列表进行修改。
而且在函数中对这个列表所做的所有的操作都是永久的。
**
注意:
**如果列表是全局变量,若它不以参数的形式传入函数,他是不能在函数里面修改的。 若它以参数的形式传入函数,它是可以被修改的。
2.禁止函数修改列表
**
方法:
**将列表得副本传递给函数function_name(list_name[:]) #使用函数名[:]切片的方式,就可以获得列表得副本
8——10
def show_magicians(name, greatname):
while name:
current_name = name.pop()
a ='the ' + 'Great' + current_name
print(a)
greatname.append(a)
name_list = ['张三','李四','王五','赵六']
greatname = []
show_magicians(name_list[:],greatname)
print(name_list)
print(greatname)
四、传递任意数量的实参
**
问题:
**预先不知道要传入几个参数怎么办?**
解决:
**使用*name,创建了一个名字叫做name的元组,所有收到的实参都会放在这个元组里面。(无论传入多少个参数都可以)
def 函数名(*name):
1.混合使用参数
**
要点:
**把任意参数放在定义的形式参数的最后面,就像下面这样def 函数名(can1, can2, can3, *name):
2.使用任意数量的关键字实参数
**
问题:
**在上面我们可以向函数中传入任意数量的参数,但是我们不知道,我们传入的这些参数具体代表是么意思,有什么用途,这怎么办?
解决:
- 传入参数时,要求用户传入键值对,以用来对传入的参数进行解释。
- **name:代表往函数中传入任意数量的键值对。
def build_profile(first, last, **user_info): #形参**user_info要求后面必须传入键值对 profile = {} profile['first_name'] = first profile['last_name'] = last for key, value in user_info.items(): profile[key] = value return profile user_profile = build_profile('albert', 'einstein', location = 'princenton', field = 'physics') print(user_prfile000)
五、将函数存储在模块中
1.导入模块的三种方式
- import 模块名
- from 模块名 import *
- 导入该模块中的所有函数
- from 模块名 import 函数名
- 导入该模块中的某个函数
2.使用as给模块和函数重命名
-
from 模块名 import 函数名 as 新的函数名
-
import 模块名 as 新的模块名