《笨方法学习python3》练习18: Names,Variables,Code,Functions: def

EX18: Names,Variables,Code,Functions

  • 例子:

    def print_two(*args):
        arg1, arg2 = args                                         
        print(f"arg1: {arg1}, arg2: {arg2}")                   
        
    def print_two_again(arg1, arg2):
        print(f"arg1: {arg1}, arg2: {arg2}")
    
    def print_one(arg1):
        print(f"arg1: {arg1}")
    
    def print_none():
        print("I got nothin'.")
    
    print_two("Zed","Shaw") 
    print_two_again("Zed","Shaw")
    print_one("First!")
    print_none()
    
  • 学习内容:函数(def)

    • 函数(def)
      • 函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。

      • 语法格式:

        def 函数名(参数列表):
            函数体
        

        return [表达式]结束函数,选择性地返回一个值给调用方。不带表达式的return相当于返回 None。

        默认情况下,参数值和参数名称是按函数声明中定义的顺序匹配起来的。

      • 参数类型:

        1. 必需参数

          必需参数须以正确的顺序传入函数。调用时的数量必须和声明时的一样。

          创建函数的参数有多少个,就要传入相应的参数个数,否则会报错。

          输入:

          def printtest(str):
              print(str)
          
          printtest(2)
          

          结果:

          2
          
        2. 关键字参数

          关键字参数和函数调用关系紧密,函数调用使用关键字参数来确定传入的参数值。

          使用关键字参数允许函数调用时参数的顺序与声明时不一致,因为 Python解释器能够用参数名匹配参数值。

          输入:

          def printtest(str1, str2):
              print(str1, str2)
          
          printtest(str2 = 2, str1 = 1)
          

          结果:

          1 2
          
        3. 默认参数

          调用函数时,如果没有传递参数,则会使用默认参数。

          输入:

          def printtest(str1, str2 = 1):
              print(f"str1:{str1}, str2有默认值为1, str2:{str2}")
          
          printtest(str1 = 1, str2 = 10)
          printtest(str1 = 1)
          

          结果:

          str1:1, str2有默认值为1, str2:10
          str1:1, str2有默认值为1, str2:1
          

          注意:在编程中出现non-default parameter follows default parameter 错误原因是:将没有默认值的参数在定义时放在了有默认值的参数的后面,即def printtest(str2 = 1, str1):,这样会报错。

        4. 不定长参数

          加了星号* 的参数会以元组(tuple)的形式导入,存放所有未命名的变量参数。

          输入:

          def printtest(str1, *str):
              print(str1, str)
          
          printtest(1, 2, 3, 4, 5)
          

          结果:

          1 (2, 3, 4, 5)
          

          加了两个星号 **的参数会以字典的形式导入。

          输入:

          def printtest(str1, **str):
              print(str1, str)
          
          printtest(1, a=2, b=3, c=4, d=5)
          

          结果:

          1 {'a': 2, 'b': 3, 'c': 4, 'd': 5}
          
  • 改变代码(寻找可能情况及错误)

    • from sys import argv改写

      输入:

      from sys import argv
      script, a1, a2 = argv
      
      def print_two(*args):
        arg1, arg2 = args                                         
          print(f"arg1: {arg1}, arg2: {arg2}")                   
          
      def print_two_again(arg1, arg2):
          print(f"arg1: {arg1}, arg2: {arg2}")
      
      def print_one(arg1):
          print(f"arg1: {arg1}")
      
      def print_none():
          print("I got nothin'.")
      
      print_two(a1, a2) 
      print_two_again(a1, a2)
      print_one(a1)
      print_none()
      

      增加了交互性,不需要在代码上修改参数值。

      结果:

      python TEST.py Zed Shaw
      arg1: Zed, arg2: Shaw
      arg1: Zed, arg2: Shaw
      arg1: Zed
      I got nothin'.
      
    • input()改写(结合.split(),一行代码完成变量赋值)

      输入:

      def print_two(*args):
          arg1, arg2 = args                                 
          print(f"arg1: {arg1}, arg2: {arg2}")                   
      def print_two_again(arg1, arg2):
          print(f"arg1: {arg1}, arg2: {arg2}")
      
      def print_one(arg1):
          print(f"arg1: {arg1}")
      
      def print_none():
          print("I got nothin'.")
      
      a1, a2 = input().split()
      
      print_two(a1, a2) 
      print_two_again(a1, a2)
      print_one(a1)
      print_none()
      

      input()询问输入内容,再将内容运用到函数上,.split()代表用输入内容的间隔用什么代表分割,默认是空格。

      结果:

      python TEST.py
      Zed Shaw
      arg1: Zed, arg2: Shaw
      arg1: Zed, arg2: Shaw
      arg1: Zed
      I got nothin'.
      
    • .format()代替f-String

      输入:

      def print_two(*args):
          # arg1, arg2 = args # 用.format()可以不需要此行。 
          print("arg1: {}, arg2: {}".format(*args))                     
      def print_two_again(arg1, arg2):
          print("arg1: {}, arg2: {}".format(arg1, arg2))
      
      def print_one(arg1):
          print("arg1: {}".format(arg1))
      
      def print_none():
          print("I got nothin'.")
      
      a1, a2 = input().split()
      
      print_two(a1, a2) 
      print_two_again(a1, a2)
      print_one(a1)
      print_none()
      

      结果:

      python TEST.py
      Zed Shaw
      arg1: Zed, arg2: Shaw
      arg1: Zed, arg2: Shaw
      arg1: Zed
      I got nothin'.
      
    • for循环扩充输入的参数数量

      输入:

      def print_two(*args):
          j = 1                                                   
          for i in args:                                          
              print(f"agr{j}:",i,end = " ")                       
              j = j+1                                            
          print()  
      
      def print_two_again(arg1, arg2):
          print(f"arg1: {arg1}, arg2: {arg2}")
      
      a, b, c, d = input().split()
      print_two(a, b, c, d)
      print_two_again(a, b)
      

      print()可用于换行,这样在调用其他函数就不会在同一行输出。如果print('\n')会导致换行两次,因为print()默认换行,再执行一次\n,这样就有两次换行。

      for i in argsfor循环可以遍历任何序列的项目,如一个列表或者一个字符串。

      结果:

      python TEST.py
      Zed Shaw Hello World
      agr1: Zed agr2: Shaw agr3: Hello agr4: World
      arg1: Zed, arg2: Shaw
      
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值