python中精简函数 python经典函数

Python中的常用内置函数有哪些呢?abs()divmod()input()open()staticmethod()
all()enumerate()int()ord()str()
any()eval()isinstance()pow()sum()
basestring()execfile()issubclass()print()super()
bin()file()iter()property()tuple()
bool()filter()len()range()type()
bytearray()float()list()raw_input()unichr()
callable()format()locals()reduce()unicode()
chr()frozenset()long()reload()vars()
classmethod()getattr()map()repr()xrange()
cmp()globals()max()reverse()zip()
compile()hasattr()memoryview()round()__import__()
complex()hash()min()set()
delattr()help()next()setattr()
dict()hex()object()slice()
dir()id()oct()sorted()
python所有内置函数的定义详解1、定义函数
函数是可重用的程序 。本书中已经使用了许多内建函数,如len()函数和range()函数 , 但是还没自定义过函数 。定义函数的语法格式如下:
def 函数名(参数):
函数体
定义函数的规则如下:
①关键字def用来定义一个函数 , 它是define的缩写 。
②函数名是函数的唯一标识,函数名的命名规则遵循标识符的命名规则 。
③函数名后面一定要紧跟着一个括号 , 括号内的参数是可选的 , 括号后面要有冒号 。
④函数体(statement)为一个或一组Python语句,注意要有缩进 。
⑤函数体的第一行可以有文档字符串,用于描述函数的功能,用三引号括起来 。
按照定义规则,可以定义第一个函数了:
def hello_world():
...print('Hello,world!')# 注意函数体要有缩进
...
【python中精简函数 python经典函数】 hello_world()
Hello,world!
这个函数不带任何参数,它的功能是打印出“Hello,world!” 。最后一行代码hello_world()是调用函数,即让Python执行函数的代码 。
2、全局变量和局部变量
全局变量是定义在所有函数外的变量 。例如,定义一个全局变量a , 分别在函数test1()和test2()使用变量a:
a = 100# 全局变量
def test1():
...print(a)
...
def test2():
...print(a)
...
test1()
100
test2()
100
定义了全局变量a之后,在函数test1()和test2()内都可以使用变量a,由此可知,全局变量的作用范围是全局 。
局部变量是在函数内定义的变量,除了用关键字global修饰的变量以外 。例如,在函数test1()内定义一个局部变量a,分别在函数外和另一个函数test2()内使用变量a:
def test1():
...a = 100# 局部变量
...print(a)
...
def test2():
...print(a)
...
test1()
100
print(a)
Traceback (most recent call last):
File "stdin", line 1, in module
NameError: name 'a' is not defined
test2()
Traceback (most recent call last):
File "stdin", line 1, in module
File "stdin", line 2, in test2
NameError: name 'a' is not defined
Python解释器提示出错了 。由于局部变量a定义在函数test1()内,因此,在函数test1()内可以使用变量a , 但是在函数外或者另一个函数test2()内使用变量a,都会报错,由此可见,局部变量的作用范围是定义它的函数内部 。
一般情况下,在函数内声明的变量都是局部变量,但是采用关键字global修饰的变量却是全局变量:
def test1():
...global a# 全局变量
...a = 100
...print(a)
...
def test2():
...print(a)
...
test1()
100
print(a)
100
test2()
100
这个程序与上个程序相比,只是在函数test1()中多了一行代码“global a”,程序便可以正确运行了 。在函数test1()中,采用关键字global修饰了变量a之后,变量a就变成了全局变量,不仅可以在该函数内使用,还可以在函数外或者其他函数内使用 。
如果在某个函数内局部变量与全局变量同名,那么在该函数中局部变量会覆盖全局变量:
a = 100# 全局变量
def test1():
...a = 200# 同名局部变量
...print(a)
...
def test2():
...print(a)
...
test1()
200
test2()
100
由于在函数test1()中定义了一个与全局变量同名的局部变量a , 因此,在函数test1()中全局变量a的值被局部变量覆盖了,但是在函数test2()中全局变量a的值没有被覆盖 。
综上所述,在Python中,全局变量保存的数据供整个脚本文件使用;而局部变量只用于临时保存数据,变量仅供局部代码块使用 。
请问这段Python代码如何用匿名函数简化?楼主你好!
要解决这道题目并不难,只需要理解匿名lambda是如何使用的便可;
“lambda 表达式1:表达式2”其实就是定义了一个函数 , 传入表达式1的参数,按表达式2的形式返回,因此,该语句也就返回了一个函数对象,请看如下代码:
def demo(x):
return x*x
lambda_demo = lambda x:x*x
以上代码中demo函数和lambda_demo是等效的,都是可以调用的对象 , 传入一个参数,返回这个参数的平方 。
那这题就不难解了,其实做的事情就是定义了两层:
1)第一层函数是传入一个参数 , 返回第二层定义的函数对象
2)第二层是不传入参数,返回第一层参数的平方
套用lambda的定义,便不难解出正确答案:
# -*- coding: utf-8 -*-
def count():
'''这是原函数'''
def f(j):
def g():
return j*j
return g
fs = []
for i in range(1, 4):
fs.append(f(i))
return fs
def edited_count():
'''这是修改后的函数'''
fs= []
for i in range(1, 4):
fs.append((lambda x:(lambda :x*x))(i))
return fs
def evol_count():
'''更加pythonic的写法'''
return [(lambda x:(lambda :x*x))(i) for i in range(1,4)]
'''一行式写法'''
one_line_count = lambda :[(lambda x:(lambda :x*x))(i) for i in range(1,4)]
再分析一下楼主两段错误代码:
第一段的报错原因在于,楼主混淆了变量的有效空间,lambda中的变量只是形式,并不会对外部变量进行录入,所以在f函数中传入的j,并不会记录在lambda中,因此,在最后执行的时候,列表中的三个函数是第一段代码段中的demo函数,需要楼主传入一个参数,再返回你传入参数的平方 。
第二段代码看代码逻辑应该是正确的,这个修改发生了什么呢?其实你定义的lambda函数形式变成了这样:
def demo(x=1):
return x*x
也就是变相的把变量的值给定义了,出错的原因应该是你在调用的时候很可能是以这样的形式调用:count()() 才导致了报错 。
希望楼主能够深入理解lambda以及python的命名空间,今后遇到这样的题目便能迎刃而解了 。
望采纳,谢谢!~
Python中的匿名函数——lambda函数 在Python中,lambda函数是一个简单的匿名函数 。该函数没有函数名 , 它可以有多个参数,但函数只由一个表达式构成 。
lambda函数具体的格式如下:
lambda参数:表达式
其中,lambda 是关键字,参数 是函数的参数 , 可以有0至多个 。冒号后面是表达式,也是该函数中的唯一的表达式,lambda函数会返回该表达式的返回值 。
我们来看一个具体的例子 。
在上述代码中,number1, number2是lambda函数的参数,number1**2 number**2是函数的表达式,该函数返回number1, number2两个数的平方和 。
上述代码创建了一个lambda函数后将其赋值给变量sum_square, 在print函数中通过sum_square来调用这个lambda函数 。
上述的lambda函数完全可用标准的函数来实现,我们可以将上述代码改写成下面的代码 。
在代码中,定义了函数sum_square,该函数包含两个参数,并执行一条语句并将该语句的执行结果作为函数返回值 。通过上述代码可以帮助我们更直观地理解lambda函数 。
lambda函数的可读性较差 , 那么为什么要有这样奇怪的匿名函数呢?这个要从lambda的使用场合说起 。我们来看下面的代码 。
上述代码定义了一个数值列表 , 调用python的内置函数filter来生成一个新的迭代器 。filter函数的第一个参数为一个函数,用于决定过滤的方法;第二个参数为一个可迭代的对象如列表、集合等 。filter函数返回一个新的迭代器, 用于获得满足第一个函数为真的所有元素 。在上述代码中,我们给filter传递的第一个参数是一个匿名函数:lambda number:number%3==0,该函数在一个数整除3时为True,否则为False. filter函数会创建一个新的迭代器,通过调用上述匿名函数来判断该元素是否满足条件,得到所有3的倍数的数 。
当然,上述代码也可以使用正常的函数方式来实现,如下所示:
我们可以看到,所有匿名函数的功能都可以通过标准函数来实现 。匿名函数常在调用其它函数(如filter, map等)时作为参数使用 。使用匿名函数可以使代码更为精简 。匿名函数主要用于完成简单的任务,如果匿名函数过于复杂,会导致可读性较差 , 调试起来也比较困难 , 因此,强烈不建议使用lambda写天书般的代码 。总之,要根据实际情况决定是否使用匿名函数 。
python中精简函数的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于python经典函数、python中精简函数的信息别忘了在本站进行查找喔 。

    推荐阅读