Python 学习笔记(十三)Python函数(二)
参数和变量
>>> def foo(a,b): #函数是一个对象
return a+b >>> p =foo #对象赋值语句。将foo函数赋值给p这个变量
>>> foo(4,5)
9
>>> p(4,5) 变量p就指向了foo这个函数
9
>>>
按引用传递参数
按照顺序进行赋值,函数中的变量a就指向了x,x是第一个实参,a这个参数指向了x所引用的对象,并不是把3这个数复制一个放到函数中,这种调用对象的方式,称之为按引用传递。
>>> x,y=3,4 #x,y两个变量分别指向了3和4
>>> foo(x,y) #函数中有两个参数a和b
7
>>> def bar(x):
x =1
>>> m = 9
>>> bar(m)
>>> m
9
>>>
一个程序的所有的变量并不是在哪个位置都可以访问的。访问权限决定于这个变量是在哪里赋值的。
变量的作用域决定了在哪一部分程序你可以访问哪个特定的变量名称。两种最基本的变量作用域如下:
全局变量和局部变量
定义在函数内部的变量拥有一个局部作用域,定义在函数外的拥有全局作用域。
局部变量只能在其被声明的函数内部访问,而全局变量可以在整个程序范围内访问。调用函数时,所有在函数内声明的变量名称都将被加入到作用域中
>>> x =2 #全局变量
>>> def foo():
x =9 #局部变量
print "this x is the fun:",x >>> foo()
this x is the fun: 9
>>> x
2
函数中的x 与函数外面的x,是不一样的。我们把像x=9这样的x,作用于某个函数体范围内的,称之为局部变量。
>>> def bar():
global x #在函数体中声明全局变量
x =9
print "this x is the fun:",x >>> x
2
>>> bar()
this x is the fun: 9
>>> x
9
>>>
命名空间:命名空间是对作用域的一种特殊抽象
参数收集和传值
收集方式1:*args
* args 是以元组的形式接收参数
>>> def foo(*arg):
print arg >>> foo(1,2,3)
(1, 2, 3) #元组形式接收参数
>>> foo("baidu","ali","qq","weixin")
('baidu', 'ali', 'qq', 'weixin')
>>> foo("web",[1,2,3,"pythom"])
('web', [1, 2, 3, 'pythom'])
>>> def foo(x,*arg):
print "x:",x
print "arg:",arg >>> foo(1,2,3)
x: 1
arg: (2, 3)
>>> foo(7)
x: 7
arg: ()
>>>
收集方式2:**kargs 是以字典形式接收参数
>>> def foo(**karg):
print karg >>> foo(a=1,b=2,c=3)
{'a': 1, 'c': 3, 'b': 2}
>>> def foo(x,*arg,**karg):
print x
print arg
print karg >>> foo(1)
1
()
{}
>>> foo(1,2)
1
(2,)
{}
>>> foo(1,2,3)
1
(2, 3)
{}
>>> foo(1,2,3,name="python")
1
(2, 3)
{'name': 'python'}
>>>
>>> def book(author,name):
print "{0} has a book :{1}".format(author,name) >>> bars={"name":"learn python with cc","author":"cc"}
>>> book(**bars)
cc has a book :learn python with cc
>>>
特殊函数
zip() 补充
>>> colors =["red","green","blue"]
>>> values=[234,12,89,65]
>>> zip(colors,values)
[('red', 234), ('green', 12), ('blue', 89)]
>>> dots=[(1,2),(3,4),(5,6)]
>>> x,y=zip(*dots)
>>> x
(1, 3, 5)
>>> y
(2, 4, 6)
>>> seq =range(1,10)
>>> zip(*[iter(seq)]*3)
[(1, 2, 3), (4, 5, 6), (7, 8, 9)]
>>> x =iter(range(1,10))
>>> x
<listiterator object at 0x0000000003E8F860>
>>> list(x)
[1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> zip(x,x,x)
[]
>>> x=iter(range(1,10))
>>> zip(x,x,x)
[(1, 2, 3), (4, 5, 6), (7, 8, 9)]
>>>
lambda lambda x: x+y lambda 变量: 表达式
map、reduce、filter
>>> def foo(x):
x+-3
return x >>> foo(4)
4
>>> n =range(10)
>>> n
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> [i+3 for i in n ]
[3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
>>> lam =lambda x:x+3
>>> n2=[]
>>> for i in n
SyntaxError: invalid syntax
>>> for i in n:
n2.append(lam(i)) >>> n2
[3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
>>> g =lambda x,y:x+y
>>> g(3,4)
7
>>> lambda x:x+4
<function <lambda> at 0x0000000003E91438>
>>> n
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> map(foo,n)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> map(lambda x:x+3,n)
[3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
>>> lst1 =[1,2,3,4,5]
>>> lst2=[6,7,8,9,0]
>>> map(lambda x,y:x+y,lst1,lst2)
[7, 9, 11, 13, 5]
>>> reduce(lambda x,y:x+y,lst1)
15
>>> n =range(-5,5)
>>> n
[-5, -4, -3, -2, -1, 0, 1, 2, 3, 4]
>>> filter(lambda x:x>0,n)
[1, 2, 3, 4]
>>> [x for x in n if x>0]
[1, 2, 3, 4]
>>>
Python 学习笔记(十三)Python函数(二)的更多相关文章
- python学习笔记11(函数二): 参数的传递、变量的作用域
一.函数形参和实参的区别 形参全称是形式参数,在用def关键字定义函数时函数名后面括号里的变量称作为形式参数. 实参全称为实际参数,在调用函数时提供的值或者变量称作为实际参数. >>> ...
- python学习笔记(十三)-python对Excel进行读写修改操作
日常工作中会遇到Excel的读写问题.我们可以使用xlwt 模块将数据写入Excel表格,使用xlrd 模块从Excel读取数据,使用xlutils模块和xlrd模块结合对Excel数据进行修改.下面 ...
- Python学习笔记之常用函数及说明
Python学习笔记之常用函数及说明 俗话说"好记性不如烂笔头",老祖宗们几千年总结出来的东西还是有些道理的,所以,常用的东西也要记下来,不记不知道,一记吓一跳,乖乖,函数咋这么多 ...
- Python学习笔记010——匿名函数lambda
1 语法 my_lambda = lambda arg1, arg2 : arg1 + arg2 + 1 arg1.arg2:参数 arg1 + arg2 + 1 :表达式 2 描述 匿名函数不需要r ...
- python学习笔记十三 JS,Dom(进阶篇)
JS介绍 JavaScript 是属于网络的脚本语言!JavaScript 被数百万计的网页用来改进设计.验证表单.检测浏览器.创建cookies,以及更多的应用:JavaScript 是因特网上最流 ...
- Python学习笔记(Ⅱ)——循环/选择/函数
一.循环结构 python中提供了for循环和while循环两种操作,没有do……while语句. 1.for循环: 与其他语言中for循环的常见的写法如for (int i=0;i<10;i+ ...
- Python学习笔记4(函数与模块)
1.Python程序的结构 Python的程序由包(package).模块(module)和函数组成. 模块是处理一类问题的集合,由函数和类组成. 包是由一系列模块组成的集合.包是一个完成特定任务的工 ...
- python学习笔记之——python函数
1.定义一个函数 你可以定义一个自己想要功能的函数,以下是简单的规则: 函数代码块以 def 关键词开头,后接函数标识符名称和圆括号(). 任何传入参数和自变量必须放在圆括号中间.圆括号之间可以用于定 ...
- python学习笔记——高阶函数map()
满足以下两点中任意一点,即为高阶函数: 1.函数接收一个或多个函数作为参数 2.函数返回一个函数 1 描述 用函数和可迭代对象中每一个元素作为参数,计算出新的迭代对象 map() 会根据提供的函数对指 ...
- Python学习笔记之Python的enumerate函数
Python 的 enumerate() 函数就像是一个神秘的黑箱,你无法简单地用一句话来概括这个函数的作用与用法. enumerate() 函数属于非常有用的高级用法,而对于这一点,很多初学者甚至中 ...
随机推荐
- BZOJ P1212 [HNOI2004] L语言
标点符号的出现晚于文字的出现,所以以前的语言都是没有标点的.现在你要处理的就是一段没有标点的文章. 一段文章T是由若干小写字母构成.一个单词W也是由若干小写字母构成.一个字典D是若干个单词的集合. 我 ...
- 30个优秀的chrome网页设计开发插件
BuiltWith Resolution Test colorPicker Palette for Chrome Chrome Sniffer JS Library Detector Google F ...
- 前端之body标签中相关标签(二)
一 列表标签 列表标签分为三种. 1.无序列表<ul>,无序列表中的每一项是<li> 英文单词解释如下: a.ul:unordered list,“无序列表”的意思. b.li ...
- border-radius圆角兼容方案
1.下载ie-css3.htc 2.CSS代码段 box { -moz-border-radius: 15px; /* Firefox */ -webkit-border-radius: 15px; ...
- Java 开源博客 Solo 1.6.0 发布 - 新后台
简介 Solo 是一款一个命令就能搭建好的 Java 开源博客系统,并内置了 15+ 套精心制作的皮肤.除此之外,Solo 还有着非常活跃的社区,文章分享到社区后可以让很多人看到,产生丰富的交流互动. ...
- 使用SVG中的Symbol元素制作Icon【摘转】
以下为内容摘抄和转摘记录: 为什么要用svg ? SVG优势 随着高清屏幕的普及,相比使用png等位图而言,使用SVG等矢量图形是一种全新的设计方式.更重要的是相比位图而言,SVG有着无可比拟的优势. ...
- Linux内核 网络数据接收流程图
各层主要函数以及位置功能说明: 1)sock_read:初始化msghdr{}的结构类型变量msg,并且将需要接收的数据存放的地址传给msg.msg_iov->iov_base. ...
- HTML5-入门。
什么是HTML5? HTML5是超文本语言,不是编程语言,html5是html语言的最新版本,需要注意浏览器的兼容性问题. HTML5技术一般是指的是HTML5.CSS3.JavaScript三种技术 ...
- CentOS随笔 - 2.CentOS7安装ftp支持(vsftpd)
前言 转帖请注明出处: http://www.cnblogs.com/Troy-Lv5/ 在前一篇文章中介绍了在虚拟机中安装CentOS7, 接下来就要进行配置了, 第一个就是安装ftp支持. 要不然 ...
- JpaRepository 查询规范
1.JpaRepository支持接口规范方法名查询.意思是如果在接口中定义的查询方法符合它的命名规则,就可以不用写实现,目前支持的关键字如下. Keyword Sample JPQL snippet ...