Python

python函数学习笔记

2019-11-27  本文已影响0人  Almira_SY

一、定义函数

1、定义函数

使用def语句,依次写出函数名、括号、括号中的参数和冒号:,然后在缩进块中编写函数体,函数的返回值用return语句返回。

def jia(a,b):
    n=a+b
    return n
print(jia(1,2))
2、空函数

实际上pass可以用来作为占位符,比如现在还没想好怎么写函数的代码,就可以先放一个pass,让代码能运行起来。

def empty():
    pass
3、参数类型检查--内置函数isinstance(),举例:
def jia(a,b):
    if not isinstance(a,(int,float)):
        raise TypeError('a is wrong type')
    if not isinstance(b,(int,float)):
        raise TypeError('b is wrong type')
    n=a+b
    return(n)
print(jia('1',1))

小结:函数执行完毕也没有return语句时,自动return None。
函数可以同时返回多个值,但其实就是一个tuple。

二、函数的参数

1、位置参数(明确规定函数需要几个参数)
def power(x, n):
    s = 1
    while n > 0:
        n = n - 1
        s = s * x
    return s
2、默认参数(在位置参数的基础上,为了以防调用是某个参数输入值需要重复或缺失)

也可以不按顺序提供部分默认参数。当不按顺序提供部分默认参数时,需要把参数名写上。
默认参数必须指向不变对象!

def fang(x,n=2):
    s=1
    while n>0:
        s=s*x
        n=n-1   
    return s
print(fang(5,3))
3、可变参数

参数前加*号,可变参数允许你传入0个或任意个参数,这些可变参数在函数调用时自动组装为一个tuple

#计算一组数字的平方和
def fang_he(*numbers):
    s=0
    for n in numbers:
        s=s+n*n
    return s
#print(fang_he([1,2,3]))  函数设置成可变参数时不能传入list或tuple列表,否则会报错
print(fang_he(1,2,3))
num=[1,3,5,7]
print(fang_he(*num))##参数前加*号,*num表示把num这个list的所有元素作为可变参数传进去
4、关键字参数

参数前加**号,关键字参数允许你传入0个或任意个含参数名的参数,这些关键字参数在函数内部自动组装为一个dict

def person(name,age,**info):
    print('name:',name,'age:',age,'other:',info)
person('Adam', 45, gender='M', job='Engineer')
dw={'city':'shenzheng','job':'test engneer'}
person('almira',27,**dw)#**extra表示把extra这个dict的所有key-value用关键字参数传入到函数的**info参数,kw将获得一个dict,注意kw获得的dict是extra的一份拷贝,对kw的改动不会影响到函数外的extra。
5、命名关键字参数

限制关键字参数的名字,就可以用命名关键字参数,例如,只接收city和job作为关键字参数

def person(name, age, *, city, job):##关键字参数**kw不同,命名关键字参数需要一个特殊分隔符*,*后面的参数被视为命名关键字参数,定义时缺少*,Python解释器将无法识别位置参数和命名关键字参数
    print(name, age, city, job)
person('Jack', 24, city='Beijing', job='Engineer')
##如果函数定义中已经有了一个可变参数,后面跟着的命名关键字参数就不再需要一个特殊分隔符*
def person(name, age, *args, city, job):
    print(name, age, args, city, job)
##调用时缺少参数名,python解释器会把参数均视为位置参数
6、参数组合(再议)

三、递归函数

在函数内部,可以调用其他函数。如果一个函数在内部调用自身本身,这个函数就是递归函数。
编写move(n, a, b, c)函数,它接收参数n,表示3个柱子A、B、C中第1个柱子A的盘子数量,

然后打印出把所有盘子从A借助B移动到C的方法(汉诺塔的移动圆盘叠放必须是小盖大)

def move(n,a,b,c):
    if n==1:
        print(a,'---->',c)
    else:
        move(n-1,a,c,b) #借助C柱,将A柱上的n-1个圆盘移动到B柱
        print(a,'---->',c) #将第n个移动到C
        move(n-1,b,a,c)#借助A柱,将B 柱上的圆盘移到C柱
move(3,'A','B','C')

根据以下廖雪峰前辈文章学习记录:

上一篇下一篇

猜你喜欢

热点阅读