参数和变量

 >>> 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函数(二)的更多相关文章

  1. python学习笔记11(函数二): 参数的传递、变量的作用域

    一.函数形参和实参的区别 形参全称是形式参数,在用def关键字定义函数时函数名后面括号里的变量称作为形式参数. 实参全称为实际参数,在调用函数时提供的值或者变量称作为实际参数. >>> ...

  2. python学习笔记(十三)-python对Excel进行读写修改操作

    日常工作中会遇到Excel的读写问题.我们可以使用xlwt 模块将数据写入Excel表格,使用xlrd 模块从Excel读取数据,使用xlutils模块和xlrd模块结合对Excel数据进行修改.下面 ...

  3. Python学习笔记之常用函数及说明

    Python学习笔记之常用函数及说明 俗话说"好记性不如烂笔头",老祖宗们几千年总结出来的东西还是有些道理的,所以,常用的东西也要记下来,不记不知道,一记吓一跳,乖乖,函数咋这么多 ...

  4. Python学习笔记010——匿名函数lambda

    1 语法 my_lambda = lambda arg1, arg2 : arg1 + arg2 + 1 arg1.arg2:参数 arg1 + arg2 + 1 :表达式 2 描述 匿名函数不需要r ...

  5. python学习笔记十三 JS,Dom(进阶篇)

    JS介绍 JavaScript 是属于网络的脚本语言!JavaScript 被数百万计的网页用来改进设计.验证表单.检测浏览器.创建cookies,以及更多的应用:JavaScript 是因特网上最流 ...

  6. Python学习笔记(Ⅱ)——循环/选择/函数

    一.循环结构 python中提供了for循环和while循环两种操作,没有do……while语句. 1.for循环: 与其他语言中for循环的常见的写法如for (int i=0;i<10;i+ ...

  7. Python学习笔记4(函数与模块)

    1.Python程序的结构 Python的程序由包(package).模块(module)和函数组成. 模块是处理一类问题的集合,由函数和类组成. 包是由一系列模块组成的集合.包是一个完成特定任务的工 ...

  8. python学习笔记之——python函数

    1.定义一个函数 你可以定义一个自己想要功能的函数,以下是简单的规则: 函数代码块以 def 关键词开头,后接函数标识符名称和圆括号(). 任何传入参数和自变量必须放在圆括号中间.圆括号之间可以用于定 ...

  9. python学习笔记——高阶函数map()

    满足以下两点中任意一点,即为高阶函数: 1.函数接收一个或多个函数作为参数 2.函数返回一个函数 1 描述 用函数和可迭代对象中每一个元素作为参数,计算出新的迭代对象 map() 会根据提供的函数对指 ...

  10. Python学习笔记之Python的enumerate函数

    Python 的 enumerate() 函数就像是一个神秘的黑箱,你无法简单地用一句话来概括这个函数的作用与用法. enumerate() 函数属于非常有用的高级用法,而对于这一点,很多初学者甚至中 ...

随机推荐

  1. 最小树形图--朱刘算法([JSOI2008]小店购物)

    题面 luogu Sol 首先设一个 \(0\) 号点,向所有点连边,表示初始价值 显然这个图的一个 \(0\) 为根的最小有向生成树的边权和就是每个买一次的最小价值 再买就一定能优惠(包含 \(0\ ...

  2. 虚树(Bzoj3611: [Heoi2014]大工程)

    题面 传送门 虚树 把跟询问有关的点拿出来建树,为了方便树\(DP\) 在\(LCA\)处要合并答案,那么把这些点的\(LCA\)也拿出来 做法:把点按\(dfs\)序排列,然后求出相邻两个点的\(L ...

  3. 前端动画小记---bilibili ( ゜-゜)つロ客户下载小动画

    逛哔哩哔哩 ( ゜-゜)つロPC版的时候看到一个蛮有意思的动画,指导用户去下载客户端,于是摸索实现了一个. 原动画效果 可以看到,一个静止的小电视人,当鼠标移动到电视人身上时,电视人慢慢变身成为一个小 ...

  4. js 中concat()和slice()方法介绍

    1.concat() concat() 方法用于连接两个或多个数组. 该方法不会改变现有的数组,而仅仅会返回被连接数组的一个副本. <script type="text/javascr ...

  5. JQuery和html+css实现带小圆点和左右按钮的轮播图

    是的!你没看错!还是轮播图.这次的JQuery的哟!! CSS代码: /*轮播图 左右按钮 小白点*/ #second_div{ margin-top: 160px; } .img_box{ over ...

  6. Angular1.x 基础总结

    官方文档:Guide to AngularJS Documentation   w3shools    angularjs教程  wiki   <AngularJS权威教程> Introd ...

  7. org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/JJ]]

    1. 如果webapps下有同名的文件,会出现以上错误: 2.解决办法: 查看项目的目录结构是否正确,对于servlet项目,WEB-INF下应该有一个classes目录,存放编译好的.class文件 ...

  8. SVG坐标系统和transformation彻底理解

    翻译自https://sarasoueidan.com/blog/svg-coordinate-systems/ SVG元素不像传统的HTML elements一样受制于css box model.这 ...

  9. Linux ping命令详解

    Linux系统的ping命令是常用的网络命令,它通常用来测试与目标主机的连通性 基于IMCP协议 常见命令参数 -q 不显示任何传送封包的信息,只显示最后的结果 -n 只输出数值 -R 记录路由过程 ...

  10. 最优化 KKT条件

    对于约束优化问题: 拉格朗日公式: 其KKT条件为: 求解 x.α.β 其中β*g(x)为互补松弛条件 KKT条件是使一组解成为最优解的必要条件,当原问题是凸问题的时候,KKT条件也是充分条件.