参数和变量

 >>> 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. CF235C Cyclical Quest

    题意 给定一个长度为\(n\)的母串 \(q\)组询问 这个串可以旋转(就是把最后一位丢到最前面这样子) 问这个串以及其旋转的串在给定的串中出现了多少次 Sol 旋转就把它复制一遍接在后面 然后就在\ ...

  2. position布局影响点击事件以及冒泡获取事件目标

    在编写功能时总是会出现很多意想不到的问题,现在就讲讲我遇到的两个问题,通过举一个相似的例子来解说. <1> 元素互相独立,不存在包含于被包含 选择城市的按钮,为它绑定点击事件,点击后就弹出 ...

  3. Windows10禁用update

    1.运行 gpedit.msc 或搜索 组策略 ,点 计算机配置—管理模板—Windows组件—Windows更新—配置自动更新 ,设置“已禁用”.2.点 控制面板—系统和安全—管理工具 ,点 服务 ...

  4. 已经不再使用的表为什么数据页还在SQLServer的内存缓存中

    1. 问题发现 在学习内存调优时,使用如下代码,查询目前内存缓冲区中生产数据库的每个对象缓存页计数 SELECT count(*)AS cached_pages_count ,name ,index_ ...

  5. ssh key生成步骤

    1. 安装git,从程序目录打开 "Git Bash" ,或者直接用git shell,github自带的工具 2. 键入命令:ssh-keygen -t rsa -C " ...

  6. 关于Unity3d的Quaternion.Slerp的学习

    首先在场景中创建三个cube的GameObject,from表示要转换之前的样子,to表示转换之后的样子,change表示转的效果.如下图所示: 其中from和change cube开始运行之前的tr ...

  7. VS :不会命中断点 代码版本与原始版本不同

    设置了断点,但是无法中断,提示"不会命中断点 代码版本与原始版本不同".这种情况下一般是生成的bin\debug下面的文件与实际代码不符. 但是这次确实没有问题,重新更新程序,清理 ...

  8. Hypver-V中的快照

    应用快照选项的区别: 获取并应用快照:对虚拟机当前的状态进行快照,然后恢复到所选的快照状态 应用:不保存当前虚拟机的状态,直接将其恢复到所选的快照状态

  9. 随手记C#资料

    1.where T: new()where后的称为泛型约束,这里约束泛型参数T必须具有无参的构造函数 2.判断路径是本地路径还是网址 private static bool IsLocalPath(s ...

  10. C++ 重载 重写 重定义

    重写:存在于类的继承,修饰符是virtual,函数的参数个数,顺序,类型,均相同. 重载:函数的参数列表,类型,顺序不相同. 重定义:对父类的函数进行屏蔽,参数列表可以不相同,没有virtual修饰