zoukankan      html  css  js  c++  java
  • Python基础八:函数

    Python基础八:函数

    Python基础系列内容为学习廖雪峰老师Python3教程的记录,廖雪峰老师官网地址:廖雪峰Python3教程


    Author:yooongchun

    Email:yooongchun@foxmail.com


    • 定义函数:函数格式 def Fun_name():

      示例:新建一个文本文件,命名为 my_abs.py,在文件中写入以下内容

      def my_abs(x):
      if x>=0:
          return x
      else:
          return -x
    • 调用函数:导入函数 from my_abs import my_abs,注意:第一个my_abs代表.py文件名称,第二个则代表函数名称

    • 空函数:定义一个什么也不做的函数使用pass语句

      def nop():
        pass

      空函数的作用:可以先让程序运行起来而后续再来添加函数内容

    • 一个实例:求解一元二次方程函数

      
      #calculate the result of an equtation
      
      import math
      def getAns(a,b,c):
      delta=b*b-4*a*c
      if delta<0:
          return '无解'
      else:
          return (-b+math.sqrt(delta))/(2*a),(-b-math.sqrt(delta))/(2*a)
    • 函数的参数:一般的,给函数传递参数采用这样的格式 fun(x,y,z,..),也可以为参数指定默认参数,如stu(name,age,gender='boy')

    • 可变参数:可变参数指的是传入的参数个数可变,比如,计算下式:i=1ni2,我们希望对于不同的n值都可以使用一个函数完成,此时一个可行的方案是你给函数传入数组,比如:

      def getResult(num):
      sum=0
        for n in num:
            sum=sum+n*n
        return sum

      使用tuple(或者list)调用,需要先把数据组装为tuple或者list

      num=(1,2,3,4,5)
      getResult(num)

      当然,python支持多参数函数的直接定义,仅需在参数名前加一个*符号即可:

      def getResult(*num):
      sum=0
        for n in num:
            sum=sum+n*n
        return sum

      此时,你便可以这样调用:

      getResult(1,2,3,4,5...)

      若要在可变参数函数中传入tuple或者list对象,只需在此基础上添加*即可

      num=[1,2,3,4,5]
      getResult(*num)
    • 关键字参数:关键字参数允许用户传入包含任意个参数名的参数,在内部自动组装为一个dict,示例如下:

      def stu(name,age,**kw):
      print('name',name,'age',age,'other',kw)

      上面的实例中,stu函数除了接收必选参数nameage外,还接受关键字参数kw。调用时,你可只传入必选参数:

      >>>stu('Mark',18)
      name Mark age 18 other {}

      也可以传入任意多个参数:

      >>> stu('Mark',18,gender='male',id=12345)
      name Mark age 18 other {'gender': 'male', 'id': 12345}

      或者传入一个额外的dict:

      >>> dic={'city':'Beijing','gender':'male'}
      >>> stu('Bob',18,**dic)
      name Bob age 18 other {'city': 'Beijing', 'gender': 'male'}

      你也可以限定所传入的参数名:

      def stu(name,age,*,city,gender):
        print('name:',name,'age:',age,'other:',city,gender)

      调用这样的关键字参数必须指定参数名称:

      >>> stu('Bob',18,city='Shanghai',gender='male')
      name: Bob age: 18 Shanghai male
    • 递归函数:在函数内部调用自身的函数为递归函数,递归函数可简化代码,使程序流程清晰。

      示例:通过递归函数实现:n!=n*(n-1)*...*2*1,使用递归的思想表达即为:f(n)=n*f(n-1)=n*(n-1)*f(n-2)=...

      def factorial(n):
        if n==1:
            return 1
        else:
            return n*factorial(n-1)

      调用上述函数:

      >>> factorial(2)
      2
      >>> factorial(7)
      5040
      >>> factorial(10)
      3628800
      >>> factorial(100)
      93326215443944152681699238856266700490715968264381621468592963895217599993229915608941463976156518286253697920827223758251185210916864000000000000000000000000

      示例2:[汉诺塔问题](http://baike.baidu.com/link?url=FlVeGTJUK3-qbuRWQ8ITwa-97NX5labH0UsH40PTL5bQxiK1tOlLynJHWTcK8jC-KQS0iltDzcgFtQU7vJPtQt-SKxmjh8xQw37nFuoLxW7t0IxDnmwWCi3HPydFkBx8 Hanoi)。也是一个经典的递归解决的问题,其基本要求是这:现有n个大小各不相同的盘子由大到小从下往上放在第一根柱子(A)上,要求通过中间柱子(B)将盘子移动到第三根柱子(C)上,也为由大到小从下到上排列。要求每次只能移动一个盘子且需保证任何时候任何柱子上的盘子都是由大到小从下到上排列,求出移动的最少步骤。

      这个问题可理解为:将第n-1个盘子移到B上,然后把n移到C上,依次类推。

      
      #汉诺塔问题
      
      def Hanoi(n,a,b,c):
      if n==1:
          print(a,'-->',c)
      else:
          Hanoi(n-1,a,c,b)
          print(a,'-->',c)
          Hanoi(n-1,b,a,c)

      调用示例:

      >>> Hanoi(2,'A','B','C')
      A --> B
      A --> C
      B --> C
      >>> Hanoi(3,'A','B','C')
      A --> C
      A --> B
      C --> B
      A --> C
      B --> A
      B --> C
      A --> C

  • 相关阅读:
    LeetCode 116. 填充每个节点的下一个右侧节点指针
    angluar 表单的验证 动态数据项表单验证
    Angular:ng-style,ng-class的使用
    1.splice(),slice(),split()快查
    js输入小写金额转大写
    Angular--CheckBox,checkbox多选,保存的时候用逗号隔开
    Angular--CheckBox
    Angular--Radio
    对于mysql中的group by分组后获取组内创建时间最大的那行数据
    GIT版本管理看这一篇就够了
  • 原文地址:https://www.cnblogs.com/yczha/p/13160235.html
Copyright © 2011-2022 走看看