Python 函数2

函数2

  1. 缺省参数

    回忆内置函数print()的用法

    • 可以在定义的时候采用赋值的方式,给予默认值给定默认值的参数要放在后面
    • 此时如果缺少参数就采用默认参数,如果有输入,就采用输入值
    • 关于实参的写法,可以全部使用位置参数,此时必须要按照形参顺序;也可以全部是用关键字的方法,此时次序没有限制.如果采用位置和关键字的混合,那么关键字参数一定要放在后面,而且前面的位置参数要对应形参
    def say_hello(name,age,city):
         print('大家好,我是{},我今年{},我来自{}'.format(name,age,city))
    say_hello('wanger',24)#此时会报错,因为缺少了一个必要的参数city
    
    def say_hello(name,age,city='yancheng'):
        print('大家好,我是{},我今年{},我来自{}'.format(name,age,city))
    say_hello('wanger',24)     
    
    
  2. 多个参数

    • 想到用列表,元组,集合
    • 如何得到用户输入的多个数据
      • 使用while循环
      • 让用户按照指定格式输入数据,然后再转
    def many_sum(iter):
        x=0
        for i in iter:
            x+=i
        return x
    
     #使用while循环
     nums=[]
     while True:
         num=input('请输入你要的数字,输入exit结束:')
         if num=='exit':
             break
         else:
             nums.append(int(num))
     print(nums)
    
    #让用户按照指定格式输入数据
    nums=input('请输入你要的列表,数字用逗号隔开:')
    nums=nums.split(',')#导出一个列表
    print(nums)
    # #用while循环,将字符串转成数字
    # new_nums=[]
    # i=0
    # while i<len(nums):
    #     new_nums.append(int(nums[i]))
    #     i+=1
    # print(new_nums)
    
    
    #这么写会出问题,不会将里面的元素转化成数字
    for num in nums:
        num=int(num)
        print(nums)
    print(nums)
    
    
  3. 可变参数

    • 可变的位置参数

      • *args一定要写在位置参数后面
      • 按顺序对应,多余的会打包成一个元组存入args
    • 可变的关键字参数

      • 关键字参数一定要在位置参数后面
      • 按照关键字对应,多余的会打包成一个字典存入kwargs
      #使用*args可以使用多个位置参数                  
      def many_print(a,b,*args):                   #这样写就至少得输入两个参数
          print("a={},b={}".format(a,b))       #按顺序对应,多余的会打包成一个元组存入args
          print('args={}'.format(args))
      many_print(1,2,3,4,5,6)
      
      print('-----------')
      
      
      #使用**kwargs可以使用多个关键字参数
      def p(a,b,*args,x=0,y=1,**kwargs):     # 注意顺序
          print("a={},b={}".format(a, b))    # 按顺序对应,多余的会打包成一个元组存入args
          print('args={}'.format(args))
          print('x={},y={}'.format(x,y))
          print('kwargs={}'.format(kwargs)) #按照关键字对应,多余的打包成一个字典存入kwargs
      p(2,3,5,6,x=1,y=2,z=3,h=6)
      
      #result
      a=1,b=2
      args=(3, 4, 5, 6)
      -----------
      a=2,b=3
      args=(5, 6)
      x=1,y=2
      kwargs={'z': 3, 'h': 6}
      
  4. 可变数据类型和不可变数据类型的传参

    def test(a):
        print('修改前a的地址%X'%id(a))
        a=100
        print('修改后a的地址%X' % id(a))
    
    def demo(nums):
        print('修改前nums的地址%X'%id(nums))
        nums[0]=10
        print('修改后nums的地址%X' % id(nums))
    
    x=1                            #不可变数据类型
    print('调用前x的地址%X'%id(x))   #调用前后a的地址发生了变化,但是x的地址没有发生变化
    test(x)
    print(x)
    print('调用后x的地址%X'%id(x))
    
    y=[1,2,3,4,5,6]                 #可变数据类型
    print('调用前y的地址%X'%id(y))    #调用前后,nums和y的地址都没发生变化
    demo(y)
    print(y)
    print('调用后y的地址%X'%id(y))
    
    #result
    调用前x的地址7FEE1D17110
    修改前a的地址7FEE1D17110
    修改后a的地址7FEE1D17D70
    1
    调用后x的地址7FEE1D17110
    调用前y的地址3F5208
    修改前nums的地址3F5208
    修改后nums的地址3F5208
    [10, 2, 3, 4, 5, 6]
    调用后y的地址3F5208
    
  5. 函数的注意事项

    • Python中不允许函数重名,如果函数重名,那么后一个会覆盖前一个

    • 定义变量要避开函数名,否则会把已有的函数覆盖(包括内置函数)

      #函数的注意事项
      #不能重名
      def test(a,b):
          print("a={},b={}".format(a,b))
      
      def test(m):
          print('hello','good','m={}'.format(m))
      
      #test(1,2)  #此时下面的函数已经覆盖了上面的函数,这样调用就会报错
      
      test=3
      #test(2)     #此时变量test已经覆盖了test函数,调用就会出错
      
      input=12
      #input(12)   #此时变量input已经覆盖了input函数,调用就会报错
      
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值