实参与形参
1、必备参数
注意:个数不能多也不能少、位置必须一一对应
def print_info(name, address):
print("我是%s,目前居住在%s" % (name, address))
print_info("小明", "中国大陆")
输出:我是小明,目前居住在中国大陆
2、关键字参数
注意:一般要写的话,关键字都写
def print_info(name, address):
print("我是%s,目前居住在%s" % (name, address))
print_info(address="中国大陆", name="小明")
输出:我是小明,目前居住在中国大陆
3、默认参数
注意:形参中,默认值参数往右方
def print_info2(name, address="中国大陆"):
print("我是%s,目前居住在%s" % (name, address))
print_info2("小红", "香港")
输出:我是小红,目前居住在香港
4、不定长参数
注意:(1)args:接收所有未命名的参数(不带关键字),args是一个元组
(2)* args2:接收所有未命名的参数(带关键字),args2是一个字典
def print_info3(name, address="中国大陆",*args):
print("我是%s,目前居住在%s" % (name, address))
print(args)
print_info3("lari", "china", "a", "b")
def print_info4(name, address,**args):
print("我是%s,目前居住在%s" % (name, address))
print(args)
print_info4("lari", "china", age=21)
输出:
我是lari,目前居住在china
(‘a’, ‘b’)
我是lari,目前居住在china
{‘age’: 21}
可变对象与不可变对象的传递
不可变对象(strings、tuple、numbers)传递的是对象的值,不是对象本身,修改的是另一个复制对象的值,不会影响原来对象本身
可变对象(list、set、dict)传递的是对象自己,影响原来对象本身
str_word = "hello"
def fun1(str1):
str1 = "test1"
fun1(str_word)
print(str_word)
list_test = ["hello", "world"]
def fun2(list1):
list1[0] = "baby"
fun2(list_test)
print(list_test)
输出:
hello
[‘baby’, ‘world’]
返回值
1、return
return既可以返回一个值,也可以返回多个值,返回多个值用多个变量接收时,则一一对用,有用一个变量接收,则返回的是一个tuple。
def fun(a, b):
return a, b
num1, num2 = fun(1, 2)
num = fun(1, 2)
print("num1: %d" % num1)
print("num2: %d" % num2)
print("num:", num)
输出如下:
2、生成器与迭代器
生成器,使用了 yield 的函数被称为生成器(generator),与return一样也是用于返回值,不同的是,return返回之后结束,而yeild是在接着上一次结束的地方接着执行,如下段代码每次都是从yield后面的print语句开始执行。
def gen(max):
i = 0
while i <= max:
yield i
print("i=", i)
i += 1
a = gen(5)
print(next(a))
print(next(a))
print(next(a))
输出:
一个特别的情况,代码如下所示,从tmp = yield i开始执行,但是没有执行yield i,所以tmp 是none,但是12行代码,给其传送给了tmp了值“gfjkfgdj”
def gen(max):
i = 0
while i <= max:
tmp = yield i
print("tmp=", tmp)
i += 1
a = gen(5)
print(next(a))
print(next(a))
print(a.send("gfjkfgdj"))
print(next(a))
输出:
迭代器,所有的可以用for in的语句都是可迭代对象,但是可迭代对象与与迭代器不用,可迭代对象要想成为迭代器,需要使用iter函数,list、string、dict都是可迭代对象,可迭代对象是可以使用next函数返回下一个值得对象
lis11 = [0,1,4,2]
it1 = iter(lis11)
print(next(it1))
输出为:0