1.有助于你理解函数不过是一种引用类型,他们的行为与你调用其他类创建对象的行为相同
成都创新互联公司2013年成立,先为盘山等服务建站,盘山等地企业,进行企业商务咨询服务。为盘山企业网站制作PC+手机+微官网三网同步一站式服务解决您的所有建站问题。
2.所有的函数(包括你后来声明的那种)都是Function类的实例,这是ECMAScript中规定的(JavaScript,Flash的ActionScript都以这个标准为基础设计的)
3.这种类似与Python中Lambda函数的用法可以简化代码,在某些地方也许你需要反复执行同一句话,把这句代码简单的写成Function类的形式不增加代码量,我觉得。
涉及到状态保存,可以使用函子(书上这么翻译的,不晓得其他人是不是也这样叫),给你个例子,你比对着改。如果不懂,自己再延这个方向去查看资料。
class Strip:
def __init__(self, characters): #初始化,将需要保留的状态信息存起来
self.characters = characters
def __call__(self, string): #创建的函子被使用时,自动调用__call__
return string.strip(self.characters)
#下面是使用方法,两个语句是密切衔接的。
strip_punctution = Strip(',;:.!?') #字符串参数将被__init__吃进去,并且保留在class中,
#相当于一种状态保存的方法,在你的例子中,你可以将用户表达式通过这种方式保存起来
strip_punctution('hello world!') #return 'hello world',他的功能是剥离characters
#字符串中出现的字符,此处把感叹号去掉了,
#这就是函子典型的使用方法,class中的__call__函数被自动调用,在你的
#例子中,你可以通过这样的方式调用函数,就不用每次重新输入表达式了。
是说这个报错了对吧。。主要在于代码的缩进问题严重。首先要有一致的缩进,可以是2个空格,4个空格,或者1个tab,但是一定要一致。。
def solve(legs, heads):
for numc is range(0, heads+1):
nump = heads - numc
totlegs = 4 * nump + 2 * numc
if totlegs == legs:
return (nump, numc)
return (None, None)
这里我全部采用的是两个空格的缩进。
给你这样一个例子吧,这个例子里面有动态增加类的函数。
声明一个类,类初始化的时候读取配置文件,根据配置列表加载特定目录下的模块下的函数,函数和模块同名,将此函数动态加载为类的成员函数。
代码如下所示:
class WinBAS(Bas):
def __init__(self):
self.__baslist = {}
self.__Init_Modules()
pass
def __Init_Modules(self):
import modplugs
for m in modplugs.__moduleset__:
mh = __import__('modules.' + m)# + '.' + m)
ma = getattr(mh, m)# + '.' + m)
ma = getattr(ma, m)
setattr(self.__class__, m, ma)
modplugs.py是模块配置文件如下:
__moduleset__ = [
'BAS_GetUserList',
]
然后建立目录modules下面建立一个空的__init__.py文件,把目录变为一个包,在modules目录下建立真正的BAS_GetUserList实现:BAS_GetUserList文件中有个BAS_GetUserList函数如下:
def BAS_GetUserList(self, strs):
return [0, strs]
这样WinBAS类就可以动态加入了BAS_GetUserList函数。
Python 函数参数有冒号 - 声明
type hint, 即类型提示 。
官方网站:
def add(a,b) - int:
return a+b
函数可以不加-表示动态定义。a b 数据类型不一定为int,也可以为float
加-表示静态定义。a b 数据类型为int
python中定义函数有两种方式:
第一种 def()
那么这种方式也是我们最经常遇到的,没有其他任何的限制,具体示例见代码
#这个函数的作用是对传入的值进行加2操作def add2(x):y = x + 2return y
那么我们怎么调用呢?其实很简单
# 定义一个变量i = 5# 对它执行加2操作add2(i)
那么最终的结果也是显而易见了,是7
第二种 lambda
这种方式由于书写的方式(等下会在代码中看到),所以就是适合很短的代码,那么让我们来举个栗子
# 定义了一个函数,作用是求一个数的平方square = lambda x: x * x
那么我们怎么调用呢?其实都是同样的道理
# 定义变量number = 3 # 调用函数square(3)
那么答案就是:9