Python学习笔记1
来源:互联网 发布:java websocket客户端 编辑:程序博客网 时间:2024/06/11 12:13
-*- coding: utf-8 -*-Python 学习笔记(thanks for Micheal liao)# 1. 寻找素数def _odd_iter():n=1while True:n=n+2yield ndef _not_divisible(n):return lambda x:x%n>0def primes():yield 2it=_odd_iter()while True:n=next(it)yield nit=filter(_not_divisible(n),it)for n in primes():if n <100:print(n)else:break# 2. 排序print(sorted(['Bob','alice','Zoo','yook'],key=str.lower,reverse=True))# 3. 闭包# 内部函数使用了外部函数的参数和局部变量# 返回的函数中保存了外部函数的参数和局部变量# 这种程序结构叫做闭包def lazy_sum(*args):def sum():ax = 0for n in args:ax = ax + nreturn axreturn sumf=lazy_sum(1,3,5,7,9)print(f)print(f())# 闭包需要注意的问题就是就不要用变化的作为参数# 比如list等def count():fs = []for i in range(1,4):def f():return i*ifs.append(f)return fsf1,f2,f3 = count()print(f1(),f2(),f3()) #结果不是1,4,9 而是9,9,9# 因为返回的函数并不是立刻执行的,而是调用的时候才执行# 就是当i=3的时候才返回的# 怎样去避免这种情况,除了使用不可变参数外# 就是再声明一个方法,用该方法的参数绑定变量当前的值def count():fs = []def f(i):def g():return i*ireturn gfor i in range(1,4):fs.append(f(i))return fsf1,f2,f3=count()print(f1(),f2(),f3()) #输出为1,4,9# 4. 匿名函数# 一个匿名函数的demoprint(list(map(lambda x:x*x,[1,2,3])))# >>>[1,4,9]# 其中的lambda x:x*x 等价于def f(i):return i*i# 使用匿名函数(lambda关键字)就是为了方便,匿名函数没有return# 函数的表达式结果就是返回值# 5. 装饰器# 在代码运行期间动态增加功能的方式,称为装饰器(Decorator)# 一个demodef log(func):def wrapper(*args,**kw): # *args,**kw 表示可以接收所有参数print("call %s():" % func.__name__)return func(*args,**kw)return wrapper@logdef now():print("2016-08-17")now()# >>> call now():# 2016-08-17# 分析:# 1.该装饰器的目的是为了在打印日期的时候,打印出方法的名字的日志# 2.@log 相当于执行了now = log(now)# 3.now函数作为参数传入到装饰器函数中,装饰器本质就是一个高级函数# 可以接收函数作为参数,并返回一个函数。# 4.原来的now函数依然存在,只是执行的是同名的返回的wrapper函数,在wrapper# 函数中先打印日志,然后调用原始函数。# 6. 偏函数(Partial function)# 当函数的参数个数太多,需要简化时,# 使用functools.partial可以创建一个新的函数,# 这个新函数可以固定住原函数的部分参数,从而在调用时更简单。# demoimport functoolsint2=functools.partial(int,base=2)print(int2('1000000'))# >>>64# 总结:其实就是类似于Python中默认参数的用法。# 7. 作用域# 正常的函数和变量名是公开的(public),可以被直接引用,比如:abc,x123,PI等;# 类似_xxx和__xxx这样的函数或变量就是非公开的(private),不应该被直接引用# 只是不应该,并不是不可以。# demodef __private1(name):return 'hello,%s' % namedef __private2(name):return 'hi,%s' % namedef greeting(name): if len(name) > 3: return __private1(name) else: return __private2(name)# 总结:这个demo只是告诉我们,外部不需要引用的函数全部定义成private,# 只有外部需要引用的函数才定义为public。# 8. 面向对象编程(OOP)# 经典的编程思想,一切皆对象。每个对象包含了数据和操作数据的函数# 类是抽象的模板,实例是具体化的类# demo class Student(object): # (object)表示继承自object类 def __init__(self, name, score): self.name = name self.score = score def print_score(self): print('%s: %s' % (self.name, self.score))# 调用bart = Student('bart simpson',59)bart.name>>>'bart simpson'# 一点提示:self其实就是实例本身,还记得java中的this嘛# 在类中定义的函数第一个参数永远是self,调用时,不用传递该参数。# __init__方法类似于java中的构造函数# 访问限制# 如果不想属性被直接的访问到并可以修改,可以把属性改成私有的# 就是在属性前加__# democlass Student(object): def __init__(self, name, score): self.__name = name self.__score = score def print_score(self): print('%s: %s' % (self.__name, self.__score))# 如果要访问并修改就要添加get/set类似的方法def get_name(self):return self.__namedef set_score(self, score): self.__score = score# 9. 继承和多态# 同样是OOP的特性之一,继承和多态与java中学的一样,并没什么特别的# 只需要注意到Python是动态语言。对于继承,动态语言的鸭子特性需要注意# java中必须传入的类型是需要的对象的父类或者子类,否则无法调用其方法# Python则不需要,只要是像鸭子或者走起路来像鸭子就可以继承。# 10. 面向对象高级编程# 实例属性和类属性class Student(object):name = 'Micheal' # 类属性s = Student()s.Name = 'Bob' # 实例属性,注意不要和类属性重名待续.........
0 0
- python学习笔记1
- python学习笔记(1)
- python学习笔记(1)
- Python学习笔记1
- Python学习笔记1
- Python 学习笔记(1)
- Python学习笔记1
- python学习笔记【1】
- Python学习笔记【1】
- python学习笔记--1
- python学习笔记1
- Python学习笔记[1]
- python学习笔记--1
- python学习笔记1
- Python学习笔记 - 1
- 学习Python笔记1
- Python学习笔记(1)
- Python学习笔记.1
- C#中Split用法~字符 数组串
- Redis集群规范(一)
- (常用时间类练习)可视化简易日历
- Contest - 多校训练(三
- Android Studio查看android源码
- Python学习笔记1
- Laravel 5.2 教程 - 队列
- HDu 5855
- ZZULI OJ 1914: 天火好帅(搞不懂的水题)
- NLPIR 汉语分词系统 (PyNLPIR) 学习手札
- jzoj 4709. 【NOIP2016提高A组模拟8.17】Matrix 组合数+乘法逆元
- C# asp.net页面通过URL参数传值中文乱码问题解决办法
- Linux下find指令
- Android Webview中解决H5的音视频不能自动播放的问题