美文网首页
函数的定义及参数详解

函数的定义及参数详解

作者: tenro | 来源:发表于2018-09-03 09:56 被阅读0次

    如何去定义一个函数:

    def condition(age):
        if age>18:
           print("do what you want it")
        elif age<18 and age>6:
           print("do something what your parents want it")
        else:
           print("drink milk in a cradle")
    
    condition(3)
    

    位置参数:(不传就报错)

    def power(x)      # x就是位置参数
    

    带默认参数的函数:(位置参数必传,默认参数不传取默认值)

    def enroll(name, gentle, age=7, city="北京"):
        print('name:', name)
        print('gender:', gender)
        print('age:', age)
        print('city:', city)
    
    enroll('Tenro', "带把的")
    enroll('Tenro', "带把的", 8)
    enroll('Tenro', "带把的", city="湖南")
    

    可变参数的函数:(可传可不传)

    #通过传入可变参数去求传入参数的平方和
    def enroll(*numbers):
          sum = 0
          for x in numbers
              sum = sun + x * x
          print(sum)
    
    enroll(1, 3, 5, 7)
    
    #定义函数参数为*,当传入的是列表或者元祖时候,调用的时候也同样带上*
    enroll(*[1, 3, 5, 7])  
    enroll(*(1, 3, 5, 7))
    

    关键字参数 **kw(位置参数必传,关键字参数可传可不传)

    def person(name, age, **kw):
          print("name:", name, "age:", age, 'other:', kw)
    
    person('tenro', 28) #双星号代码非必选参数
    person('tenro', 28, city = "beijing") #可以自定义内容
    person('tenro', 28, city = "beijing", job = "engineer") #支持多组定义内容
    
    extra = {'city': 'shanghai', 'job': 'manager'}
    person('tangsen', 32, city = extra['city'], job = extra['job'])
    person('tangsen', 32, **extra)
    

    命名关键字参数(位置参数必传,命名关键字参数必须用*分割,除非有可变参数在中间)

    和关键字参数**kw不同,命名关键字参数需要一个特殊分隔符*,*后面的参数被视为命名关键字参数)
    def person(name, age, *, city, job):
        print(name, age, city, job)
    
    person('tenro', 28, city='Beijing', job='Engineer')
    
    如果函数定义中已经有了一个可变参数,后面跟着的命名关键字参数就不再需要一个特殊分隔符*了:
    def person(name, age, *args, city, job):
        print(name, age, args, city, job
    
    person('tenro', 28, (12, 34), city='Beijing', job='Engineer')
    

    递归函数及优化

    #递归函数(数值过大会导致栈的溢出)
    def fact(n):
      if n == 1:
        return 1
      return n * fact(n - 1)
    
    print(fact(5))
    print(fact(1))
    print(fact(100))
    
    #优化递归函数(每一次的返回会释放一次栈内存)
    def fact(num):
      return superFact(num, 1)
    def superFact(num, product):
      if num == 1:
        return product
      return superFact(num-1, product*num)

    相关文章

      网友评论

          本文标题:函数的定义及参数详解

          本文链接:https://www.haomeiwen.com/subject/cnhhwftx.html