参数和变量

 >>> 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. TAT

    瞎扯 继\(HNOI,\)学科\(,CTSC, APIO\)连续爆炸之后 曾一度的怀疑人生,没有任何搞学习的欲望 不断的反省自己:我为什么这么菜? 然后回去搞学科,一直处于一个颓废的状态 后来得知\( ...

  2. BZOJ P4720[Noip2016]换教室____solution

    题目太长不表 <--无形传送,最为致命 学习一点数学期望的基础,预处理最短路,然后加上DP即可.(废话) 理解决策和结果的差别: 在这里每阶段的决策有两个:申请|不申请 结果有两个:换|不换 然 ...

  3. 使用postMessage通信,未触发message事件

    前提: 父子页面跨域通信,使用postMessage技术 a页面为父页面,b页面为子页面 a中包含多个iframe,部分域名是相同的,目录层级不一致,地址使用变量根据触发的条件不同拼接地址 部分代码( ...

  4. vue组件编写知识点

  5. centos下安装ipython(minglnghang命令行)

    下载文件 wget https://bootstrap.pypa.io/get-pip.py --no-check-certificate 执行安装 python get-pip.py 这就安装好了 ...

  6. vs2015新建web应用程序空模板和添加webapi的模板生成文件的比较

    文件名为全红色的,是使用webapi模板生成的新文件夹或文件

  7. Sqoop操作集合

    1.在hive中建一个与mysql中一模一样的表 sqoop create-hive-table --connect jdbc:mysql://***.**.***.**:3306/数据库名称 --t ...

  8. ASP.NET Core 添加静态目录访问、使其它目录可被访问

    使用app.UseFileServer 在 public void Configure(){}中,修改或添加 app.UseFileServer(new FileServerOptions() { F ...

  9. 51nod 1952 栈

    题目链接戳这 如果只是从尾端插入,那么问题就是基础的:求取栈内最大值的问题,这用单调栈解决即可. 但是前端也能插入,一般的单调栈已经不能满足.那么想象,如果在前端插入一个小值,相当于在栈底多加一个值罢 ...

  10. jq局部打印插件jQuery.print.js(兼容IE8)

    /* @license * jQuery.print, version 1.5.1 * (c) Sathvik Ponangi, Doers' Guild * Licence: CC-By (http ...