Python3基础 函数问题之传参和形参

函数:可以重复执行的语句块,可以重复调用。

    def函数名(参数列表):
          语句块(代码块)

key1:传参和形参相互照应,但不是一个东西。

 传参方式:形参定义方式:
    位置传参1.位置形参arg
    序列传参* 2.星号元组形参* args     
    关键字传参3.命名关键字形参参名= arg
    字典关键字传参** 4.双星号字典形参** args

位置传参----位置形参:散进散坐,按顺序对应就坐,位置数量固定,多了少了都不行。

               -----星号元组形参:散进团坐,顺序入座,都有座位。如果单座每了,坐元组里。 

序列传参----位置形参:团进散坐,*拆解后,按顺序就坐,位置数量固定。

              ----星号元组形参:团进团坐,*拆解后,顺序就坐在元组里。都有座位

             需要注意2点:1。传参是序列,需要用*拆解序列,一个一个进入函数的实参元组中,否则会整体代表一个参数传入。

                                      2.星号元组形参可以吸收多余的位置形参,这些被多余的形参会被装在一个元组里!在这个元组里!

In [42]: def fx(*args):
   ....:     print(args)
   ....:     print(*args)
   ....:     

In [43]: fx(1,2,3,4)
(1, 2, 3, 4)
1 2 3 4

In [44]: fx([1,2,3,4])
([1, 2, 3, 4],)
[1, 2, 3, 4]

In [45]: fx(*[1,2,3,4])
(1, 2, 3, 4)
1 2 3 4

关键字传参----命名关键字形参:散进散坐,按名字入座呗,一个萝卜一个坑,多了少了都不行

                  -----双星号字典形参:散进团坐,按名字坐,单座没了坐在字典里。

字典关键字传参----命名关键字形参:团进散坐,**拆解,各自按照自己名字的座位坐,座位数量固定。多少都不行。

                           -----双星号字典形参:团进团坐,**拆解,按名字坐,单座没了坐在字典里。

In [3]: def fn(**kwargs):
    print(kwargs)
In [4]: fn(a=1,b=2,c=3)
{'b': 2, 'a': 1, 'c': 3}
In [5]: fn(**{'a':1, 'b':2, 'c':3})
{'a': 1, 'b': 2, 'c': 3}

 

key2:传参方式,形参方式都可以结合使用,但要注意设置顺序

传参:通常位置传参和序列传参先传递,其次是关键字传参和字典关键字传参

形参:fn(位置形参,星号元组形参,命名关键字形参,双星号字典形参)

           可以接收任意位置传参和关键字传参的函数:

           def fn(* args,** kwargs):
                    psss

 

PS。一个小练习

   写一个函数,实现range功能。

def myrange(*args):
    start = 0
    end = 0
    step = 1
    # L = []   还没有学到生成器 yield函数的可以将生成数字放入列表再取出
    # 先对传入参数进行判断和赋值
    if len(args) == 1:
        end = args[0]
    elif len(args) == 2:
        start = args[0]
        end = args[1]
    elif len(args) == 3:
        start = args[0]
        end = args[1]
        step = args[2]
    else:
        print("输入不合法")
        return None
    # 根据参数生成整数
    if step > 0 and end > start:
        while start < end:
            # L.append(start)
            yield start
            start += step
        # return L
    elif step < 0 and end < start:
        while start > end:
            # L.append(start)
            yield start
            start += step
        # return L
    else:
        return None


# 测试用例
print(list(myrange(10)))
print(list(myrange(10,0)))
print(list(myrange(1,5,2)))
print(list(myrange(10,5,-2)))

print(list(range(10)))
print(list(range(10,0)))
print(list(range(1,5,2)))
print(list(range(10,5,-2)))

                          

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值