第二天 Python3.4.2 函数
2016-02-28 00:41
453 查看
1.什么是函数
1.1 函数是组织好的,可以重复使用的,实现单一功能的代码段
1.2 函数有输入(参数)和输出(返回值)
1.3 python中,函数是一等对象(first clas)
函数的定义与调用:
如果里面有赋值,创建新的变量,没有赋值,就用原来的变量的值。
1.1 位置参数和关键字参数
1.2 关键字参数和位置参数的的混合使用:
注意:混合使用的时候,关键字参数必须在位置参数之后。
位置参数和关键字参数是有其所在的位置决定。
1.3 默认参数:
1.4 可变参数:
1.5 可变位置参数
(5, 4, 3, 2, 1)
Out[21]: 15
1.6 可变关键字参数:
*kwargs 表示
1.7 可变参数函数在定义的时候,就决定了参数是位置参数还是关键字参数
可变参数和可变位置参数的混合使用:
位置参数,可变参数,可变关键字参数结合:
不允许关键字参数在最后面:
符合关键字参数的赋值:
总结:
规则
1:可变参数在位置参数之后
2.默认参数在其他参数之后
3.可变位置参数在非可变参数之前,非可变参数必须以关键字参数传参
4可变关键字参数必须在非可变参数之后
老光给的:
1.非默认非可变参数,可变位置参数,可变关键字参数
2.默认参数不要和可变参数放在一起使用
2.参数解包
3:默认参数的坑:
如果我只是输出一个1
4 函数的返回值
1.1 函数是组织好的,可以重复使用的,实现单一功能的代码段
1.2 函数有输入(参数)和输出(返回值)
1.3 python中,函数是一等对象(first clas)
函数的定义与调用:
In [33]: def fn(): ....: pass ....: In [34]: fn() In [35]: def fn(): ....: print ('test fn') ....: In [36]: fn() test fn
如果里面有赋值,创建新的变量,没有赋值,就用原来的变量的值。
In [43]: lst=[1,2,3] In [44]: def append(item): ....: lst.append(item) ....: In [45]: append(4) In [46]: lst Out[46]: [1, 2, 3, 4]
1.1 位置参数和关键字参数
In [1]: def add(x,y): ...: print("x={0}".format(x)) ...: print("y={0}".format(y)) ...: return x+y ...: In [2]: add(1,2) #位置参数 通过参数传递的位置决定 x=1 y=2 Out[2]: 3 In [3]: add(x=3,y=4) #关键字参数 通过参数名称来决定 x=3 y=4 Out[3]: 7 In [4]: add(y=2,x=3) #关键字参数,关键字参数,是通过参数名称来决定的 x=3 y=2 Out[4]: 5
1.2 关键字参数和位置参数的的混合使用:
注意:混合使用的时候,关键字参数必须在位置参数之后。
In [5]: add(1,y=2) x=1 y=2 Out[5]: 3 In [6]: add(x=1,2) File "<ipython-input-6-f55da436a67c>", line 1 add(x=1,2) ^ SyntaxError: non-keyword arg after keyword arg
位置参数和关键字参数是有其所在的位置决定。
1.3 默认参数:
In [1]: def inc(x,i=1): ...: return x + i ...: In [2]: inc(5) Out[2]: 6 In [3]: inc(5, 3) Out[3]: 8 当默认参数和位置参数在一块使用的时候,世界是美好的。
使用mysql连接的时候,这个功能用法就很好,root 和 密码一样,只需要修改host
1.4 可变参数:
In [9]: def sum(lst): #参数是列表 ...: ret = 0 ...: for x in lst: ...: ret += x ...: return ret In [11]: sum([1,2,3,4,5]) Out[11]: 15
1.5 可变位置参数
In [16]: def sum(*args): ....: ret = 0 ....: print (args) ....: for x in args: ....: ret +=x ....: return ret In [18]: sum(1,2,3,4,5) #元组 (1, 2, 3, 4, 5) Out[18]: 15 In [21]: sum(5,4,3,2,1)
(5, 4, 3, 2, 1)
Out[21]: 15
1.6 可变关键字参数:
*kwargs 表示
In [24]: def print_info(**kwargs): ....: for k,v in kwargs.items(): ....: print ('{0}==>{1}'.format(k,v)) ....: In [25]: print_info(a=1,b=2) a==>1 b==>2 In [26]: print_info(a=1,b=2,c=3) c==>3 a==>1 b==>
1.7 可变参数函数在定义的时候,就决定了参数是位置参数还是关键字参数
可变参数和可变位置参数的混合使用:
In [31]: def print_info(*args,**kwargs): ....: for x in args: ....: print (x) ....: for k,v in kwargs.items(): ....: print ('{0}====>{1}'.format(k,v)) ....: In [32]: print_info(1,2,3,4,a=5,b=6) 1 2 3 4 a====>5
位置参数,可变参数,可变关键字参数结合:
In [38]: def print_info(x,y,*args,**kwargs): print ('x = {0}'.format(x)) print ('y = {0}'.format(y)) for x in args: print (x) for k,v in kwargs.items(): print ('{0} ====>{1}'.format(k,v)) ....: In [39]: print_info(1,2,3,4,5,6,a=7,b=8) x = 1 y = 2 3 4 5 6 a ====>7 b ====>8
不允许关键字参数在最后面:
In [40]: def print_info(*args,**kwargs,x,y): print ('x = {0}'.format(x)) print ('y = {0}'.format(y)) for x in args: print (x) for k,v in kwargs.items(): print ('{0} ====>{1}'.format(k,v)) ....: File "<ipython-input-40-77353f341e5d>", line 1 def print_info(*args,**kwargs,x,y): ^ SyntaxError: invalid syntax
符合关键字参数的赋值:
In [41]: def print_info(x,y=0,*args,**kwargs): print ('x = {0}'.format(x)) print ('y = {0}'.format(y)) for x in args: print (x) for k,v in kwargs.items(): print ('{0} ====>{1}'.format(k,v)) ....: In [42]: print_info(1, 2, 4, 5, 6, a=7, b=8) x = 1 y = 2 4 5 6 a ====>7 b ====>8
In [43]: print_info(1, a=7, b=8) x = 1 y = 0 a ====>7 b ====>8
总结:
规则
1:可变参数在位置参数之后
2.默认参数在其他参数之后
3.可变位置参数在非可变参数之前,非可变参数必须以关键字参数传参
4可变关键字参数必须在非可变参数之后
老光给的:
1.非默认非可变参数,可变位置参数,可变关键字参数
2.默认参数不要和可变参数放在一起使用
2.参数解包
In [49]: def add(x,y): print('x is {0}'.format(x)) print('y is {0}'.format(y)) return x+y ....: In [50]: lst=[1,2] In [51]: add(lst[0],lst[1]) x is 1 y is 2 Out[51]: 3 In [52]: add(*lst) x is 1 y is 2 Out[52]: 3
In [57]: d = {'x': 1, 'y': 2} In [58]: add(**d) x is 1 y is 2 Out[58]: 3
In [59]: add(*[1,2,3,4,5]) --------------------------------------------------------------------------- TypeError Traceback (most recent call last) <ipython-input-59-89024c0349d7> in <module>() ----> 1 add(*[1,2,3,4,5]) TypeError: add() takes 2 positional arguments but 5 were given #2个参数给了5个 In [60]: add(**{'x':1,'y':2,'z':3}) --------------------------------------------------------------------------- TypeError Traceback (most recent call last) <ipython-input-60-61d57683cd86> in <module>() ----> 1 add(**{'x':1,'y':2,'z':3}) TypeError: add() got an unexpected keyword argument 'z' #多个z In [62]: add(**{'x':1}) --------------------------------------------------------------------------- TypeError Traceback (most recent call last) <ipython-input-62-9feb3d25ee96> in <module>() ----> 1 add(**{'x':1}) TypeError: add() missing 1 required positional argument: 'y' #少了一个参数
3:默认参数的坑:
In [64]: def fn(lst=[]): ....: lst.append(1) ....: print(lst) ....: In [65]: fn() [1] In [66]: fn() [1, 1] In [67]: fn() [1, 1, 1] In [68]: fn() [1, 1, 1, 1]
如果我只是输出一个1
def fn(lst = None): #在jypyter 测试通过 if lst is None: lst = [] lst.append(1) print(lst) fn() [1] In [9]: fn() [1] In [10]: fn() [1]
4 函数的返回值
相关文章推荐
- Python基础语法(Python基础知识点)
- python开发学习-day07(面向对象之多态、类的方法、反射、新式类and旧式类、socket编程)
- 六、keytool工具
- Python基础语法(Python基础知识点)
- python 写的一个爬虫程序源码
- Python中time模块和datetime模块的用法示例
- 简要讲解Python编程中线程的创建与锁的使用
- python3 装饰器
- 第二天 Python3.4.2 字符串的格式化 和 常用操作
- 基于Python的数据可视化 matplotlib seaborn pandas
- python中map()与zip()操作方法
- Notepad++插件Emmet不工作解决办法
- python之字符串
- python中input()与raw_input()的区别分析
- python PIL模块与随机生成中文验证码
- Pythont特殊语法filter,map,reduce,apply使用方法
- python常用模块os,random,sys
- 用Python做的数学四则运算_算术口算练习程序(后添加减乘除)
- win7+gvim7.4+spf13使用自动补全编写python脚本
- [知乎]学了 Python 之后,再学 Java 是不是会更容易?