美文网首页
python学习3

python学习3

作者: Sshaylee | 来源:发表于2018-12-20 10:51 被阅读0次

学廖雪峰老师的python教程笔记。

1、函数

当代码出现有规律的重复的时候,一遍一遍写会很麻烦,就写函数,直接调用函数简便。

自己定义函数还要内置函数参数数据类型检查 (isinstance)

def my_abs(x):                    # def 函数名 参数名及个数

if not isinstance(x, (int, float)):         #先对函数参数的数据类型进行检查

    raiseTypeError('bad operand type')

if x >=0:                                

    return x

else:

    return -x 

return需要返回多个值时,其实返回的是一个tuple。

仍直接 print(r)

定义参数:默认参数(必须在固定参数后面)

当函数有多个参数时,把变化大的参数放前面,变化小的参数放后面。变化小的参数就可以作为默认参数。

使用默认参数有什么好处?最大的好处是能降低调用函数的难度。

def enroll(name, gender, age=6, city='Beijing'):  age和city是默认参数

print('name:', name) 

 print('gender:', gender) 

 print('age:', age) 

 print('city:', city)

有多个默认参数时,调用的时候,既可以按顺序提供默认参数,比如调用enroll('Bob', 'M', 7),意思是,除了name,gender这两个参数外,最后1个参数应用在参数age上,city参数由于没有提供,仍然使用默认值。

也可以不按顺序提供部分默认参数。当不按顺序提供部分默认参数时,需要把参数名写上。比如调用enroll('Adam', 'M', city='Tianjin'),意思是,city参数用传进去的值,其他默认参数继续使用默认值。

默认参数必须指向不变对象。不能为list。None也是不变对象。

函数内可变参数,即参数的个数可以变化,

def calc(*numbers):

    sum =0

    for n in numbers: 

     sum = sum + n * n

     return sum

不加* 只能传入一个List或tuple。 calc([1,2,3])

加了表示list/t其中元素  刻意直接写calc(1,2,3)

即 *list 表示list其中元素。


关键字参数:

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

defperson(name, age, **kw):       # kw是一个字典

    print('name:', name,'age:', age,'other:', kw)

>>> person('Michael',30)

name: Michael age:30 other: {}

好处:扩展函数 ex.注册时name age是必填,kw选填。kw这个字典 参数个数任意。但是不知道传了哪些

一个字典kw 也可以直接用**引入字典元素

>>> extra = {'city':'Beijing','job':'Engineer'}

>>> person('Jack',24, **extra)

name: Jack age:24other: {'city':'Beijing','job':'Engineer'}

参数获得的是extra的copy 对kw改变不会改变extra。


命名关键字

定义只接受哪些关键字参数

defperson(name, age, *, city, job):

print(name, age, city, job)

>>> person('Jack',24, city='Beijing', job='Engineer')

Jack24Beijing Engineer

如果函数定义中已经有了一个可变参数 * ,后面跟着的命名关键字参数就不再需要一个特殊分隔符*了。

也可以将另一设为默认,只传入一个值。

2、函数参数定义的顺序必须是:必选参数、默认参数、可变参数、命名关键字参数和关键字参数

由于* 和** ,只将对应元组、字典中元素取出,对应放入参数类型

3、*args是可变参数,输入值,args接收的是一个tuple;

**kw是关键字参数,kw接收的是一个dict。

可变参数既可以直接传入:func(1, 2, 3),又可以先组装list或tuple,再通过*args传入:func(*(1, 2, 3));若传入的列表前不加*,则表示该元素为列表,元素个数为1

关键字参数既可以直接传入:func(a=1, b=2),又可以先组装dict,再通过**kw传入:func(**{'a': 1, 'b': 2})。

相关文章

网友评论

      本文标题:python学习3

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