python函数详解

实参与形参

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

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值