参数和变量

 >>> 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. 面向对象第四章(封装、static)

    1.package: 1)作用:避免类名的冲突 2)包名可以有层次结构 3)类的全称: 包名.类名,同包中的类不能同名 4)建议:包名所有字母都小写 import: 1)同包中的类可以直接访问, 不同 ...

  2. CSS中的onmouseover和hover有什么区别

    它们一样是因为:都是鼠标落上去的时候触发的.它们不一样是因为:onmousemove是javascript里面的,他可以触发js命令,但是hover做不到,hover只是css样式的类,只能定义样式. ...

  3. Java设计模式—备忘录模式

    个人感觉备忘录模式是一个比较难的设计模式,备忘录模式就是一个对象的备份模式,提供了一种程序数据的备份方法. 定义如下:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态.这样以 ...

  4. hustoj搭建--常见问题

    环境: Centos6.5   apache2+PHP5+MySQL 设置apache服务器网站根路径(设置之后可通过IP访问OJ) 1. 进入目录/etc/httpd/conf下的httpd.con ...

  5. Android8.0适配那点事(二)

    小伙伴们,咱们今天咱继续对Android8.0的适配进行分解,今天将针对启动页,版本适配和系统限制等进行“啃食” 猛戳这里查看Android8.0适配那点事(一): 1.启动页适配 近日,我无意中发现 ...

  6. 使用OmniGraffle创建流程图

    Mac下使用OmniGraffle创建是一个不错的选择 可以保存为OG格式,可以导出为VXD格式供visio使用

  7. v-model实现

    v-model就是输入的值实时显示的目的,如果纯粹写登录页面的form控件没有实时显示的需求 就不用绑定v-model.

  8. Java多线程学习笔记(三)同步和异步

    首先是一段代码: public class HasSelfPrivateNum { public void addI(String username){ try { int num=0; if(use ...

  9. Value与Sql Value

    在使用Value作为参数传递给SqlServer时 实际上传递的是SqlValue 为其赋值的一种方式,可以将datetime类型转换成string类型(yyyy-MM-dd HH:mm:ss)

  10. 如何递归执行view的动画

    如何递归执行view的动画 效果: 山寨的源头: 图片素材: 源码: // // ViewController.m // RepeatAnimationView // // Created by Yo ...