Python学习之函数

Python学习目录python

  1. 在Mac下使用Python3
  2. Python学习之数据类型
  3. Python学习之函数
  4. Python学习之高级特性
  5. Python学习之函数式编程
  6. Python学习之模块
  7. Python学习之面向对象编程
  8. Python学习之面向对象高级编程
  9. Python学习之错误调试和测试
  10. Python学习之IO编程
  11. Python学习之进程和线程
  12. Python学习之正则
  13. Python学习之经常使用模块
  14. Python学习之网络编程

练习代码git

咱们知道圆的面积计算公式为:S = πr2,当咱们知道半径r的值时,就能够根据公式计算出面积。假设咱们须要计算3个不一样大小的圆的面积:github

r1 = 12.34
r2 = 9.08
r3 = 73.1
s1 = 3.14 * r1 * r1
s2 = 3.14 * r2 * r2
s3 = 3.14 * r3 * r3
复制代码

当代码出现有规律的重复的时候,你就须要小心了,每次写3.14 * x * x不只很麻烦,并且,若是要把3.14改为3.14159265359的时候,得所有替换。编程

有了函数,咱们就再也不每次写s = 3.14 * x * x,而是写成更有意义的函数调用s = area_of_circle(x),而函数area_of_circle自己只须要写一次,就能够屡次调用。网络

基本上全部的高级语言都支持函数,Python也不例外。Python不但能很是灵活地定义函数,并且自己内置了不少有用的函数,能够直接调用。函数式编程

定义函数

  • 使用def语句,依次写出函数名、括号、括号中的参数和冒号:,而后,在缩进块中编写函数体,函数的返回值用return语句返回。
def my_abs(x):
    if x >= 0:
        return x
    else:
        return -x
复制代码
  • 可返回多个值(返回值是一个tuple!可是,在语法上,返回一个tuple能够省略括号,而多个变量能够同时接收一个tuple,按位置赋给对应的值,因此,Python的函数返回多值其实就是返回一个tuple)。
import math
def move(x, y, step, angle=0):
    nx = x + step * math.cos(angle)
    ny = y - step * math.sin(angle)
    return nx, ny
x, y = move(100, 100, 60, math.pi / 6)
复制代码

函数的参数

位置参数

def power(x, n):
    s = 1
    while n > 0:
        n = n - 1
        s = s * x
    return s
复制代码

power(x, n)函数有两个参数:xn,这两个参数都是位置参数,调用函数时,传入的两个值按照位置顺序依次赋给参数xn函数

默认参数

def enroll(name, gender, age=6, city='Beijing'):
    print('name:', name)
    print('gender:', gender)
    print('age:', age)
    print('city:', city)
enroll('Bob', 'M', 7)
enroll('Adam', 'M', city='Tianjin')
复制代码

从上面的例子能够看出,默认参数能够简化函数的调用。设置默认参数时,有几点要注意: 一是必选参数在前,默认参数在后,不然Python的解释器会报错;二是当函数有多个参数时,把变化大的参数放前面,变化小的参数放后面。变化小的参数就能够做为默认参数。三是默认参数必须指向不变对象(str、None等)!post

可变参数

def calc(*numbers):
    sum = 0
    for n in numbers:
        sum = sum + n * n
    return sum
calc(1, 2)
nums = [1, 2, 3]
calc(*nums)
复制代码

能够看出,可变参数就是传入的参数个数是可变的,能够是1个、2个到任意个,还能够是0个。学习

关键字参数

可变参数容许你传入0个或任意个参数,这些可变参数在函数调用时自动组装为一个tuple。而关键字参数容许你传入0个或任意个含参数名的参数,这些关键字参数在函数内部自动组装为一个dict。测试

def person(name, age, **kw):
    print('name:', name, 'age:', age, 'other:', kw)
extra = {'city': 'Beijing', 'job': 'Engineer'}
person('Jack', 24, **extra)

>>> name: Jack age: 24 other: {'city': 'Beijing', 'job': 'Engineer'}
复制代码

命名关键字参数

def person(name, age, *, city, job):
    print(name, age, city, job)
person('Jack', 24, city='Beijing', job='Engineer')

>>> Jack 24 Beijing Engineer

def person(name, age, *args, city='Beijing', job):
    print(name, age, args, city, job)
person('Jack', 24, job='Engineer')

>>> Jack 24 Beijing Engineer
复制代码

和关键字参数**kw不一样,命名关键字参数须要一个特殊分隔符*,*后面的参数被视为命名关键字参数。若是函数定义中已经有了一个可变参数,后面跟着的命名关键字参数就再也不须要一个特殊分隔符*了

下一篇:Python学习之高级特性

相关文章
相关标签/搜索