-
匿函数的使用sorted_ignore_case = functools.partial(sorted, cmp=lambda s1, s2: cmp(s1.upper(), s2.upper()))查看全部
-
接受函数做参数叫做高阶函数查看全部
-
str.upper()把字符串 str 任意字符变成大写 str.lower()把字符串str任意字符变成小写 str.capitalize()返回一个首字符大写其他字符小写的str的副本查看全部
-
函数名只是函数的入口地址。所以上一节只是保存了f相当于只保存了内部函数的入口地址在list中,既然3个都保存完了,说明循环也执行完了,i变成了3。 但是为什么不是每次调用的时候重新开始做for循环呢?从函数的定义可以看出,f函数定义在for循环之下。所以不会每次从1开始进行for循环迭代,而只会用里面的i值,但是当真正调用它们的时候,i已经是3了。 而如果用fs.append(f()),是将每次迭代的结果i*i保存在fs中,只是保存了值。f1,f2,f3只是3个值,使用的时候不用再次调用函数,结果就与i无关了。查看全部
-
python中,函数(方法)并不是依附与类才能存在。函数并不只是在类中定义。这种直接在模块中而不是类中定义的函数(方法),叫做函数。 而 方法(method),是依附于类 的,他们定义在类中,是属于类的,但是他们本质上,还是一个函数。方法的第一个参数不一定必须是self。 这么说吧,凡是def foo()这种,都是函数,在类中定义的函数,就是方法。 总结: 方法:类内普通方法,类方法 函数:普通函数,类内的静态方法查看全部
-
1,内部函数如果使用外部函数中的临时变量,python其实应该是维护了一个指向该临时变量的引用,该引用为内部函数对象所持有,但是内部函数并不拥有一个该临时变量的复制版本。 2,外部函数运行结束返回后,其临时变量因为被内部函数对象所引用,因此不会被自动销毁(利用某种智能指针机制) 3,内部函数对象被调用运行时,通过对临时变量的引用获取到的值,是外部函数运行结束时刻该临时变量的值。 为什么练习题中将内部函数嵌套一次调用就可以?关键原因是,python中函数调用时,对传入的参数是做了一次复制(类似于C函数参数的入栈)。 当执行到r = f(i)的时候,当时的i变量被复制一份并命名为j,传入了f函数,在f函数内部定义的g函数引用了j,而j的值在f函数中是没有被修改的,所以一直保持了执行r = f(i)时刻i的值。 所以实际上就是,利用一次函数调用中的参数传递,给i创造了一个不变的副本,最终返回的闭包函数引用的是该副本而不是i本身。查看全部
-
这个代码中主要就是理解@log('DEBUG')的部分,其实理解为test=log_decorator(test),这样就迎刃而解了。当时也需要理解函数名也是变量这个知识点 def log(prefix): def log_decorator(f): def wrapper(*args, **kw): print '[%s] %s()...' % (prefix, f.__name__) return f(*args, **kw) return wrapper return log_decorator @log('DEBUG') def test(): pass print test()查看全部
-
class Person(object): def __init__(self, name, score): self.name = name self.__score = score p = Person('Bob', 59) print p.name try: print p.__score except: print 'attributeerror'查看全部
-
包、模块(文件系统中)查看全部
-
闭包 (一)定义:像这种内层函数引用了外层函数的变量(参数也算变量),然后返回内层函数的情况,称为闭包(Closure)。 例子: def addx(x): def adder(y): return x+y return adder >>> c = addx(8) >>> print c(10) 结果:18 结合这段简单的代码和定义来说明闭包: 如果在一个内部函数里:adder(y)就是这个内部函数, 对在外部作用域(但不是在全局作用域)的变量进行引用:x就是被引用的变量,x在外部作用域addx里面,但不在全局作用域里, 则这个内部函数adder就是一个闭包。 (二)使用闭包注意的事项 1、闭包中是不能修改外部作用域的局部变量的 def foo(): m=0 def foo1(): m=1 print m print m foo1() print m >>> foo() 结果:0 1 0 从执行结果可以看出,虽然在闭包里面也定义了一个变量m,但是其不会改变外部函数中的局部变量m。查看全部
-
以前我所认识的变量,比如字符串,数值等,是很低级的变量。后来出现了一个新的变量,它的名称是函数,它的出现可以调用低级的变量字符串,数值等产生新的字符串和数值。现在出现了新的变量,它的名称是高阶函数,它可以调用低级的变量,可以调用函数,可以规定函数要怎么作用于低级变量,可以产生新的字符串可以产生新的函数。查看全部
-
闭包的特点是返回的函数还引用了外层函数的局部变量,所以,要正确使用闭包,就要确保引用的局部变量在函数返回后不能变。查看全部
-
要定义关键字参数,使用 **kw; 除了可以直接使用self.name = 'xxx'设置一个属性外,还可以通过 setattr(self, 'name', 'xxx') 设置属性。 参考代码: class Person(object): def __init__(self, name, gender, birth, **kw): self.name = name self.gender = gender self.birth = birth for k, v in kw.iteritems(): setattr(self, k, v) xiaoming = Person('Xiao Ming', 'Male', '1990-1-1', job='Student') print xiaoming.name print xiaoming.job查看全部
-
1.对 int、str 等内置数据类型排序时,Python的 sorted() 按照默认的比较函数 cmp 排序,但是,如果对一组 Student 类的实例排序时,就必须提供我们自己的特殊方法 __cmp__(): 2.巧用cmp()方法,是代码更简洁 3.print sorted(L) 注意这里一定调用的是sorted()方法否则实例将不会排序查看全部
举报
0/150
提交
取消