python函数内部函数(Python里为什么函数可以返回一个函数内部定义的函数)

1.Python 里为什么函数可以返回一个函数内部定义的函数

“在Python中,函数本身也是对象” 这一本质。

那不妨慢慢来,从最基本的概念开始,讨论一下这个问题:1. Python中一切皆对象 这恐怕是学习Python最有用的一句话。想必你已经知道Python中的list, tuple, dict等内置数据结构,当你执行:alist = [1, 2, 3] 时,你就创建了一个列表对象,并且用alist这个变量引用它:当然你也可以自己定义一个类:class House(object):def __init__(self, area, city):self.area = area self.city = city def sell(self, price):[。

] #other code return price 然后创建一个类的对象:house = House(200, 'Shanghai') OK,你立马就在上海有了一套200平米的房子,它有一些属性(area, city),和一些方法(__init__, self):2. 函数是第一类对象 和list, tuple, dict以及用House创建的对象一样,当你定义一个函数时,函数也是对象:def func(a, b):return a+b 在全局域,函数对象被函数名引用着,它接收两个参数a和b,计算这两个参数的和作为返回值。所谓第一类对象,意思是可以用标识符给对象命名,并且对象可以被当作数据处理,例如赋值、作为参数传递给函数,或者作为返回值return 等 因此,你完全可以用其他变量名引用这个函数对象:add = func 这样,你就可以像调用func(1, 2)一样,通过新的引用调用函数了:print func(1, 2) print add(1, 2) #the same as func(1, 2) 或者将函数对象作为参数,传递给另一个函数:def caller_func(f):return f(1, 2) if __name__ == "__main__":print caller_func(func) 可以看到,函数对象func作为参数传递给caller_func函数,传参过程类似于一个赋值操作f=func;于是func函数对象,被caller_func函数作用域中的局部变量f引用,f实际指向了函数func;cc 当执行return f(1, 2)的时候,相当于执行了return func(1, 2);因此输出结果为3。

3. 函数对象 vs 函数调用 无论是把函数赋值给新的标识符,还是作为参数传递给新的函数,针对的都是函数对象本身,而不是函数的调用。用一个更加简单,但从外观上看,更容易产生混淆的例子来说明这个问题。

例如定义了下面这个函数:def func():return "hello,world" 然后分别执行两次赋值:ref1 = func #将函数对象赋值给ref1 ref2 = func() #调用函数,将函数的返回值("hello,world"字符串)赋值给ref2 很多初学者会混淆这两种赋值,通过Python内建的type函数,可以查看一下这两次赋值的结果:In [4]: type(ref1) Out[4]: function In [5]: type(ref2) Out[5]: str 可以看到,ref1引用了函数对象本身,而ref2则引用了函数的返回值。通过内建的callable函数,可以进一步验证ref1是可调用的,而ref2是不可调用的:In [9]: callable(ref1) Out[9]: True In [10]: callable(ref2) Out[10]: False 传参的效果与之类似。

4. 闭包&LEGB法则 所谓闭包,就是将组成函数的语句和这些语句的执行环境打包在一起时,得到的对象 听上去的确有些复杂,还是用一个栗子来帮助理解一下。假设我们在foo.py模块中做了如下定义:#foo.py filename = "foo.py" def call_func(f):return f() #如前面介绍的,f引用一个函数对象,然后调用它 在另一个func.py模块中,写下了这样的代码:#func.py import foo #导入foo.py filename = "func.py" def show_filename():return "filename: %s" % filename if __name__ == "__main__":print foo.call_func(show_filename) #注意:实际发生调用的位置,是在foo.call_func函数中 当我们用python func.py命令执行func.py时输出结果为:chiyu@chiyu-PC:~$ python func.py filename:func.py 很显然show_filename()函数使用的filename变量的值,是在与它相同环境(func.py模块)中定义的那个。

尽管foo.py模块中也定义了同名的filename变量,而且实际调用show_filename的位置也是在foo.py的call_func内部。而对于嵌套函数,这一机制则会表现的更加明显:闭包将会捕捉内层函数执行所需的整个环境:#enclosed.py import foo def wrapper():filename = "enclosed.py" def show_filename():return "filename: %s" % filename print foo.call_func(show_filename) #输出:filename: enclosed.py 实际上,每一个函数对象,都有一个指向了该函数定义时所在全局名称空间的__globals__属性:#show_filename inside wrapper#show_filename.__globals__ {'__builtins__': , #内建作用域环境'__file__': 'enclosed.py', 'wrapper': , #直接外围环境'__package__': None, '__name__': '__main__', 'foo': , #全局环境'__doc__': None } 当代码执行到show_filename中的return "filename: %s" % filename语句时,解析器按照下面的顺序查找filename变量:Local - 本地函数(show_filename)内部,通过任何方式赋值的,而且没有被global关键字声明为全局变量的filename变量;Enclosing - 直接外围空间(上层函数wrapper)的本地作用域,查找filename变量(如果有多层嵌套,则由内而外逐层查找,直至最外层的函数);Global - 全局空间(模块enclosed.py),在模块顶层赋值的filename变量;Builtin - 内置模块(__builtin__)中预定义的变量名中查找。

2.什么是Python的内置函数

去百度文库,查看完整内容>

内容来自用户:邓向豪

python内置函数大全

博客分类:?

python

最近一直在看python的document,打算在基础方面重点看一下python的keyword、Build-in Function、Build-in Constants、Build-in Types、Build-in Exception这四个方面,其实在看的时候发现整个《The Python Standard Library》章节都是很不错的,其中描述了很多不错的主题。先把Build-in Function罗列一下吧,初学者的了解,分类可能不准确,一起交流。

一、数学运算类

abs(x)|求绝对值|1、参数可以是整型,也可以是复数|2、若参数是复数,则返回复数的模|

complex([real[, imag]])|创建一个复数|

divmod(a, b)|分别取商和余数|注意:整型、浮点型都可以|

float([x])|将一个字符串或数转换为浮点数。如果无参数将返回0.0|

int([x[, base]])?|将一个字符转换为int类型,base表示进制|

long([x[, base]])?|将一个字符转换为long类型|

pow(x, y[, z])?|返回x的y次幂|

range([start], stop[, step])?|产生一个序列,默认从0开始|

round(x[, n])?|四舍五入|

sum(iterable[, start])?|对集合求和|

oct(x)|将一个数字转化为8进制|

hex(x)|将整数x转换为16进制字符串|

chr(i)|返回整数i对应的ASCII字符|

bin(x)|将整数x转换为二进制字符串|

bool([x])|将x转换为Boolean类型|

二、集合类操作

basestring()三、逻辑判断help()--帮助信息

3.python内建函数

python内建函数总结1. abs(x) abs()函数返回数字(可为普通型、长整型或浮点型)的绝对值。

如果给出复数,返回值就是该复数的模。例如: >>>print abs(-2,4) 2.4 >>>print abs(4+2j) 4.4721359552. apply(function,args[,keywords]) apply()函数将args参数应用到function上。

function参数必须是可调用对象(函数、方法或其他可调用对象)。args参数必须以序列形式给出。

列表在应用之前被转换为元组。function对象在被调用时,将args列表的内容分别作为独立的参数看待。

例如: apply(add,(1,3,4)) 等价于 add(1,3,4) 在以列表或元组定义了一列参数,且需要将此列表参数分别作为个个独立参数使用的情况下,必须使用apply()函数。在要把变长参数列应用到已函数上时,apply()函数非常有用。

可选项keywords参数应是个字典,字典的关键字是字符串。这些字符串在apply()函数的参数列末尾处给出,它们将被用作关键字参数。

3. buffer(object[,offset[,size]]) 如果object对象支持缓存调用接口buffer()函数就为object对象创建一个新缓存。这样的对象包括字符串、数组和缓存。

该新缓存通过使用从offset参数值开始知道该对象末尾的存储片段或从offset参数值开始直到size参数给出的尺寸为长度的存储片段来引用object对象。如果没给出任何选项参数,缓存区域就覆盖整个序列,最终得到的缓存对象是object对象数据的只读拷贝。

缓存对象用于给某个对象类型创建一个更友好的接口。比如,字符串对象类型通用缓存对象而变得可用,允许逐个字节地访问字符串中的信息。

4. callable(object) callable()函数在object对象是可调用对象的情况下,返回真(true);否则假(false),可调用对象包括函数、方法、代码对象、类(在调用时返回新的实例)和已经定义‘调用’方法的类实例5. chr(i) chr()函数返回与ASCII码i相匹配的一个单一字符串,如下例所示: >>>print chr(72)+chr(101)+chr(108)+chr(111) hello chr()函数是ord()函数的反函数,其中ord()函数将字符串转换回ASCII整数码,参数i的取值应在0~255范围内。如果参数i的取值在此范围之外,将引发ValueError异常。

6. cmp(x,y) cmp()函数比较x和y这两个对象,且根据比较结果返回一个整数。如果xy,则返回正数。

请注意,此函数特别用来比较数值大小,而不是任何引用关系,因而有下面的结果: >>>a=99 >>>b=int('99') >>>cmp(a,b) 07. coerce(x,y) coerce()函数返回一个元组,该元组由两个数值型参数组成。此函数将两个数值型参数转换为同一类型数字,其转换规则与算术转换规则一样。

一下是两个例子: >>>a=1 >>>b=1.2 >>>coerce(a,b) (1.0,1.2) >>>a=1+2j >>>b=4.3e10 >>>coerce(a,b) ((1+2j),(43000000000+0j))8 compile(string,filename,kind) compile()函数将string编译为代码对象,编译生成的代码对象接下来被exec语句执行,接着能利用eval()函数对其进行求值。filename参数应是代码从其中读出的文件名。

如果内部生成文件名,filename参数值应是相应的标识符。kind参数指定string参数中所含代码的类别。

举例如下: >>>a=compile('print “Hello World”','','single') >>>exec(a) Hello World >>>eval(a) Hello World9. complex(real,[image]) Complex()函数返回一个复数,其实部为real参数值。如果给出image参数的值,则虚部就为image;如果默认image参数,则虚部为0j。

10. delattr(object,name) delattr()函数在object对象许可时,删除object对象的name属性,此函数等价于如下语句: del object.attr 而delattr()函数允许利用编程方法定义来定义object和name参数,并不是在代码中显示指定。

4.python常用内置函数有哪些

Python在设计上坚持了清晰划一的风格,这使得Python成为一门易读、易维护,并且被大量用户所欢迎的、用途广泛的语言。

接下来,记录一些本人自主学习Python的一些笔记:all 一个可迭代对象的所有元素都为真,则返回True print(all([1,2,3])) # True print(all([0,1,2])) # False12 any 一个可迭代对象中只要有一个元素为真,则返回True print(any([1,0,0])) # True print(any([0])) # False12 bin 将一个十进制数字转化成一个二进制数字的字符串 print(bin(2)) # 0b101 hex 将一个十进制数字转化成一个十六进制数字的字符串 print(hex(2)) # 0x21 oct 将一个十进制数字转化成一个八进制数字的字符串 print(oct(8)) # 0o21 callable 判断一个对象是否是可以被调用的,那么什么样才是可被调用的呢,即类似于“test()”这样的写法。函数与类皆可以被调用 b = 2 def func():pass print(callable(b),callable(func)) # False True1234 exec 将一串代码字符串,以代码的形式执行 code = ''' n = 0 while n < 10:print(n) n+=1''' exec(code)1234567 执行结果:eval 将一串基本数据类型的字符串,转化成基本数据类型 s_list = "[1,2,3,4]" l = eval(s_list) # 此时l已经是一个列表对象了 print(l[0]) # 1123 dir 查看某个类型下的所有方法 l = [1,2,3] print(dir(l)) # 此时将会打印列表的所有方法12 divmod 获取两个数相除后的商和余数 print(divmod(5,2)) # 结果:(2,1)。

5除以2得到商2,余数为11 max 获取某个可迭代对象的最大值 print(max([4,3,2,8])) # 结果:81 min 获取某个可迭代对象的最小值 print(min([4,3,2,8])) # 结果:21 sum 获取某个可迭代对象的和 print(sum([4,3,2,8])) # 结果:171 pow(a,b) 获取a的b次方 print(pow(3,3)) # 结果:271 type 查看数据类型 print(type("abc")) # 结果:1 round 保留小数。注意:它的保留方式是向下保留,并不是四舍五入 print(round(1.345,2)) # 结果:1.341 filter 将一个可迭代对象按某种特定方式过滤,生成一个新的可迭代对象 f = filter(lambda x : x > 5,range(10)) for index in f:print(index) # 打印结果:6,7,8,9123 map 将一个可迭代对象按某种特定方式处理,生成一个新的可迭代对象。

效果与列表生成式一样 m = map(lambda x : x * 2,range(10)) for index in m:print(index)# 列表生成式写法 l = [x * 2 for x in range(10)] for index in l:print(index)。

5.python的内建函数跟库函数的区别

【区别】:

标准库函数都需要import xxx才能取得。

内建函数都在__builtins__里面,在global里直接就能用。

【补充】:

1.python中,我们可以通过对内建的比较函数进行自定义,来实现运算符重载。

我们常用的比较运算符有

大于 >; 对应的内建比较函数为 __gt__()

大于等于 >;= 对应的内建比较函数为 __ge__()

等于 == 对应的内建比较函数为 __eq__()

小于 <; 对应的内建比较函数为 __lt__()

小于等于 <;= 对应的内建比较函数为 __le__()

2.库函数(Library function)是把函数放到库里,供别人使用的一种方式。.方法是把一些常用到的函数编完放到一个文件里,供不同的人进行调用。调用的时候把它所在的文件名用#include<>;加到里面就可以了。一般是放到lib文件里的。

【参考资料】:

/link?url=-_

6.python 2.7.6内置函数有哪些

内置函数,在python帮助文档中:Build-in Functions

在Python提示符下,输入下面语句,就会显示Python提供的内置函数列表

>>>dir('__builtins__')

abs(_) 内置函数,绝对值或复数的模。

chr() 以单字节整数为参数,返回一个单字符的字符串,其内容是与之对于的ASCII字符。如chr(69)返回'E'。

cmp() 比较字符串,cmp('Xiao','Jian')返回1

coerce() (可以看成一个数值类型转换函数)有两个参数,都是数字,返回这两个数字的一个列表,将这两个数字的数据类型统一。如coerce(1,2j),返回(1+0j,2j)

complex() 内置函数,把……转换成复数,如complex('2')返回(2+0j),complex('2+3j')返回(2+3j)。

divmod() 内置函数,有两个参数,返回(商,余数)。如divmod(10,2.5),返回(4.0,0.0)。

filter(function,list) 把函数应用于list中的每一项,并返回 从函数中返回真值的项。注:function可以为None,此时删除list中的0或空项。

float() 内置函数,把……转换成浮点数。

floor() 在math模块内,需要import math。向下取整,即向x轴负方向取整。如math.floor(1.9)返回1,math.floor(-2.5)返回-3。

hash() 散列功能,词典键的最精确功能需求是它一定是可散列的。对象的散列值是半唯一的、内部生成的数字,它可用于快速比较。

int() 内置函数,把字符串或者小数转换为一个整数。直接去掉小数部分。如int(5.3)返回5,int('5')返回5。

len(x) 序列x的长度

long() 内置函数,把数字 或 代表整数的字符串 转换成长整型

map(function,list[,list,。])

max() 找出字符串中最大的字符。如:min('find the minimum character'),返回' ',即空格。

min() 找出字符串中最小的字符。如:max('find the maximum character'),返回'x'。

oct() 将十进制数转换成八进制,再变成字符。

ord() 参数是单个的ASCII字符,返回该ASCII字符对应的整数值,如ord('a')返回97。

pow() 内置函数,乘方。如果有第三个参数,则表示乘方的结果对第三参数取余,如pow(2,3)返回8,pow(2,3,4)返回0。

print 输出到窗口

range() 生成一个向量,例如range(m,n,d),从m到n,步长为d;range(m)则生成0:m-1,步长为1的向量。

raw_input() 输入函数,参数为字符串,作为输入时的提示语句。返回值为字符串。

reduce(func)

round() 内置函数,对数字进行四舍五入,第二个参数表示精确到小数点后指定的位数,默认值为0。如round(2.4)返回2,round(1.398,2)返回1.40。

type() 返回某数据的类型

python函数内部函数

转载请注明出处代码入门网 » python函数内部函数(Python里为什么函数可以返回一个函数内部定义的函数)

资讯

pythonrw(python中wr表示什么意思)

阅读(27)

本文主要为您介绍pythonrw,内容包括python中w、r表示什么意思,python中w、r表示什么意思,python读写文件中w与wt;r与rt有何区别。文件读写就是一种常见的IO操作。文件读写操作步骤不同的编程语言读写文件的操作步骤大体都是一样的,都分为以

资讯

python获取文件修改时间(python中如何获得文件的修改时间)

阅读(25)

本文主要为您介绍python获取文件修改时间,内容包括python中如何获得文件的修改时间,如何在Python中获取文件创建和修改日期/时间,python中怎样获取文件的修改时间及其他系统信息状态。我们通过文件属性的获取,os.stat() 方法:>>>import os>>>s

资讯

pythonsetdefault(python中.setdefault是什么)

阅读(26)

本文主要为您介绍pythonsetdefault,内容包括python中.setdefault()是什么,python中.setdefault()是什么,python关于dict中的setdefault的问题。>> trainSet={}>>> trainSet.setdefault(1,2) # 给字典trainSet 设置键为1 值为2的键

资讯

python3索引(如何用Python建立索引)

阅读(42)

本文主要为您介绍python3索引,内容包括如何用Python建立索引,如何用Python建立索引建立索引:首先输入100行字符串,用于构建,python如何将列表作为列表的索引。import repatt = re.compile("\w+")def makeIndex(filename):index = {}w

资讯

python行分割(Python中split和split的区别)

阅读(36)

本文主要为您介绍python行分割,内容包括使用python如何按行数拆分文件,python中怎么拆分一行内多列数据成多行,如何用python对一行字符串进行不规则分割。str.split( ) 切割符默认为所有的空字符,包括空格、换行(\n)、制表符(\t)等。str.split("

资讯

pythoninnutshell(PythonString和PyQtQString的区别)

阅读(25)

本文主要为您介绍pythoninnutshell,内容包括#!/usr/bin/python这是个什么意思,PythonString和PyQtQString的区别,python中的foriinrange怎么用。以下在python2.5和PyQt4.4.6 for python2.5环境下讨论。在python中有两种与字符有关的类型:str

资讯

python字典key排序(Python中如何以dict的key排序输出)

阅读(27)

本文主要为您介绍python字典key排序,内容包括Python中如何以dict的key排序输出,求助:python元组作为字典的key的排序问题,python怎么对字典进行排序。123456789101112131415#输出的2113顺序却不是我们预想5261的那样初始4102化的顺序,查询相1

资讯

pythonwindows编码转换(python编码转换)

阅读(37)

本文主要为您介绍pythonwindows编码转换,内容包括python编码转换,python中前后台怎么进行编码转换,python编码转换。A. Usage decode/encode:def utf2gbk(s): 按utf-8解码,再按gbk编码 return s.dec

资讯

python(abi)=2.4is(复数3+4i在Python中的表示方式是)

阅读(24)

本文主要为您介绍python(abi)=2.4is,内容包括linux下安装yum时报错需要python(abi)=2.4请问怎么处理,复数3+4i在Python中的表示方式是,Python问题给出下列代码:zhanyi=“用心战疫,共待花期”可以输出。在python中,复数的表示是【实数部+虚数

资讯

python自动提交(如何用python脚本提交JS的表单)

阅读(22)

本文主要为您介绍python自动提交,内容包括如何用python脚本提交JS的表单,如何利用python进行参数的自动填写,怎么用python提交multipart/formdata数据。如果是要提交表单内容给 服务器的 python 处理,那么只需要在表单 <form&gt; 里面的 acti

资讯

python按顺序(python顺序表)

阅读(23)

本文主要为您介绍python按顺序,内容包括python顺序表,求python字典中根据值的大小,按顺序排列键的方法,python从键盘输入a、b两个数,按大小顺序输出它们。本问题回答如下:你可以根据自己的需求稍微改动一下# -*- coding: cp936 -*-class Stu

资讯

pythonrw(python中wr表示什么意思)

阅读(27)

本文主要为您介绍pythonrw,内容包括python中w、r表示什么意思,python中w、r表示什么意思,python读写文件中w与wt;r与rt有何区别。文件读写就是一种常见的IO操作。文件读写操作步骤不同的编程语言读写文件的操作步骤大体都是一样的,都分为以

资讯

python获取文件修改时间(python中如何获得文件的修改时间)

阅读(25)

本文主要为您介绍python获取文件修改时间,内容包括python中如何获得文件的修改时间,如何在Python中获取文件创建和修改日期/时间,python中怎样获取文件的修改时间及其他系统信息状态。我们通过文件属性的获取,os.stat() 方法:>>>import os>>>s

资讯

pythonsetdefault(python中.setdefault是什么)

阅读(26)

本文主要为您介绍pythonsetdefault,内容包括python中.setdefault()是什么,python中.setdefault()是什么,python关于dict中的setdefault的问题。>> trainSet={}>>> trainSet.setdefault(1,2) # 给字典trainSet 设置键为1 值为2的键

资讯

python3索引(如何用Python建立索引)

阅读(42)

本文主要为您介绍python3索引,内容包括如何用Python建立索引,如何用Python建立索引建立索引:首先输入100行字符串,用于构建,python如何将列表作为列表的索引。import repatt = re.compile("\w+")def makeIndex(filename):index = {}w

资讯

python找最大(python如何将一串数字找出里面最大和最小)

阅读(50)

本文主要为您介绍python找最大,内容包括python如何将一串数字找出里面最大和最小,python找最大值,Python用while循环在一组数中找出最大值,力求简单。目标:我们的目标是把一串数字拆开,查找最大值和最小值做法:1. 将数值转化为字符串2. 将字符

资讯

linuxpython库位置(怎样查看python安装路径)

阅读(1)

本文主要为您介绍linuxpython库位置,内容包括linuxpythonos库在什么地方,linuxpython类库在哪,centos中python的类库文件安装在什么位置。方法如下:linux查看python安装位置。有时我们需要查看python的安装位置,好安装第三方库,linux可以先pyt

资讯

python爬虫是什么(python爬虫是什么)

阅读(1)

本文主要为您介绍python爬虫是什么,内容包括python爬虫是什么,python为什么叫爬虫,python里面的爬虫是什么。世界上80%的爬虫是基于Python开发的,学好爬虫技能,可为后续的大数据分析、挖掘、机器学习等提供重要的数据源。什么是爬虫?网络爬虫(

资讯

python未知数(python的不等号是什么)

阅读(1)

本文主要为您介绍python未知数,内容包括请问python怎么用变量表示未知数之间的关系,请问python怎么用变量表示未知数之间的关系,python的不等号是什么。python的不等号如下:!= 不等于 - 比较两个对象是否不相等。

资讯

pythonxef(Python里的flag)

阅读(1)

本文主要为您介绍pythonxef,内容包括pythondef是什么意思,Python里的flag,python里defdrawGap是什么意思。

资讯

pythondll结构体(c结构体怎么用python写)

阅读(1)

本文主要为您介绍pythondll结构体,内容包括c结构体怎么用python写,python怎么构造一个结构体,python怎么导入ctypes。C封装了一个Dll,名为SpjMatlabTest.dll,暴露实现: typedef struct{ double *Min; dou

资讯

python小项目练手(推荐几个适合新手练手的Python项目)

阅读(1)

本文主要为您介绍python小项目练手,内容包括推荐几个适合新手练手的Python项目,python哪些练手的小程序,Python的练手项目值得推荐。实例一:满分推荐,非常值得练习GitHub - Yixiaohan/show-me-the-code: Python 练习册,每天一个小

资讯

python与c语言的区别是(python与C的区别)

阅读(1)

本文主要为您介绍python与c语言的区别是,内容包括python与C的区别,C语言和Python有什么区别呢,c语言和python区别。python与C的区别如下。语言类型不同。Python是一种动态类型语言,又是强类型语言。它们确定一个变量的类型是在您第一次给它

资讯

python3创建文件(python怎么创建一个txt文件)

阅读(1)

本文主要为您介绍python3创建文件,内容包括Python中如何创建文件,python怎么创建一个txt文件,python如何创建文件夹。python怎么创建一个txt文件的方法。如下参考:1.首先使用内置的空闲编辑器进行编辑(右键单击并选择copy),如下图所示。

资讯

python发布服务器(如何用Python搭建一个服务器)

阅读(1)

本文主要为您介绍python发布服务器,内容包括python怎么发布到服务器,如何用Python做大文件上传的服务端,怎么将python部署在服务器上。利用Python自带的包可以建立简单的web服务器。在DOS里cd到准备做服务器根目录的路径下,输入命令:python -