1、defsingleton(cls):
2、deftest_second(num):
3、yieldele
4、classA(object):
5、#普通成员函数
6、print"ExitedwithException"
7、printfun(3)#实现执行的即是sum(2,3)
8、Python奇技淫巧
9、A.class_foo("para")#更直接的类方法调用
10、defstatic_foo(x):
11、ExitedwithoutException
12、args.extend(extra_args)
13、@classmethod#使用classmethod进行装饰
14、装饰器之单例
15、ifvalue100:
16、sys.exit(status)
17、defsay(self):
18、__init__method
19、@staticmethod#使用staticmethod进行装饰
20、returninstances[cls]
21、defpartial(func,*part_args):
22、fromserverimportServer
23、其中上下文表达式是跟在with之后的表达式,该表示大返回一个上下文管理对象
24、单行注释使用“#”符号,只能注释一行代码。多行注释使用三个双引号或单引号,可以注释多行代码。
25、forlineinmy_file:
26、print"__init__method"
27、以三个引号开始,三个引号结尾的注释方法就是多行注释,这三个引号可以使单引号也可以是双引号。
28、printres
29、>>>"mynameis{name}".format(name=name)
30、withopen("test.","r")asmy_file:#注意,是__enter__()方法的返回值赋值给了my_file,
31、#执行结果
32、test="testattribute"
33、看一下下面这个例子
34、staticmethod装饰器
35、returnself._score
36、settings,args=process_command_line(argv)
37、#单例装饰器
38、defclass_foo(cls,x):
39、在传入字符串时,会使用compile(source,'
40、classTest(object):
41、ifnotisinstance(value,int):
42、各种时间形式转换
43、printnum
44、执行结果如下:
45、在python中也会有注释有很多行的时候,这种情况下就需要批量多行注释符了。多行注释是用三引号''''''包含的。
46、#号右边的内容在执行的时候是不会被输出的。
47、return','.join(map(str,self.lst))
48、#run(settings,args)
49、deftest_with():
50、defscore(self):
51、#常见with使用场景
52、self._score=value
53、thatattribute.Forexample,getattr(x,‘foobar’)isequivalentto
54、一行作判断
55、runningbeforeException
56、print"executingstatic_foo(%s)"%x
57、forrowinreader:
58、#checknumberofarguments,verifyvalues,etc.:
59、test_getattr()
60、deftest_iter():
61、classMyWith(object):
62、printt1,t2
63、deftest_second():
64、('xiaoming','china','10'),
65、'export','info','interface','stream']
66、知道具体原理,我们可以自定义支持上下文管理协议的类,类中实现__enter__和__exit__方法
67、------分割线-----
68、x.foobar.Ifthenamedattributedoesnotexist,defaultisreturnedif
69、partial使用上很像C++中仿函数(函数对象).
70、#常被用作单行注释符号,在代码中使用#时,它右边的任何数据都会被忽略,当做是注释;注意,仅限单行
71、staticmethod装饰器,没有任何隐式参数.python中的静态方法类似与C++中的静态方法
72、#-*-coding:utf-8-*-
73、File"bin/python",line34,in
74、property(fget=None,fset=None,fdel=None,=None)
75、按下快捷键Ctrl+/,选中的代码行将变为注释状态。
76、status=main()
77、print"ExitedwithoutException"
78、returnFalse
79、当条件满足时,返回的为等号后面的变量,否则返回else后语句
80、printline
81、returnwrer
82、__exit__method
83、print"second"
84、print"runningmy_with"
85、井号(#)常被用作单行注释符号,在代码中使用#时,它右边的任何数据都会被忽略,当做是注释。
86、t1=Test()
87、"test_third":test_third
88、'Storage','disable_logging_to_stderr','enable_logging_to_kids',
89、#两者具有相同的地址
90、t2=Test()
91、通过__str__的重写,可以直接通过想要的形式打印对象
92、obj.static_foo("para")#静态方法并没有任何隐式参数,但是要通过对象或者类进行调用
93、fornuminobj:
94、fget是获取属性的值的函数,fset是设置属性值的函数,fdel是删除属性的函数,是一个字符串(likeacomment).从实现来看,这些参数都是可选的
95、未注释的代码块
96、'-h','--help',action='help',
97、condition="para==5andtest_second(test_first)>5"
98、#licationcodehere,like:
99、returna+b
100、with语句需要支持上下文管理协议的对象,上下文管理协议包含__enter__和__exit__两个方法.with语句建立运行时上下文需要通过这两个方法执行进入和退出操作.
101、printnew_lst
102、parser=optparse.OptionParser(
103、returnsettings,args
104、`argv`isalistofarguments,or`None`for``sys.argv[1:]``.
105、#python内建函数
106、returnfunc(*args)
107、foreleinxrange(len(self.lst)):
108、exec和eval在执行代码时,除了返回值其他行为都相同
109、raiseValueError('scoremustbetween0~100!')
110、res=eval(condition,action)#解释condition并根据action对应的动作执行
111、print"executingclass_foo(%s,%s)"%(cls,x)
112、property有三个方法getter(),setter()和delete()来指定fget,fset和fdel。这表示以下这行
113、一、单行注释
114、__all__=['APIBase','Client','LogFormatter','Server',
115、定义私有类属性
116、defprocess_command_line(argv):
117、classStudent(object):
118、fromdecoratorimportinterface,export,stream
119、defread(self):
120、writer.writerow(['name','address','age'])#单行写入
121、executingfoo(
122、eval我理解为一种内嵌的python解释器(这种解释可能会有偏差),会解释字符串为对应的代码并执行,并且将执行结果返回
123、fromfunctoolsimportpartial
124、__repr__=__str__
125、读写csv文件
126、print"executingfoo(%s,%s)"%(self,x)
127、fromclientimportClient
128、data=[
129、print"third"
130、神奇partial
131、在stackoverflow给出了类似与partial的运行方式
132、lst=[1,2,3]
133、[1,3,5]
134、使用装饰器实现简单的单例模式
135、parser.error('programtakesnocommand-linearguments;'
136、#initializetheparserobject:
137、getattr
138、executingstatic_foo(para)
139、instances[cls]=cls(*args,**kwargs)
140、#输出结果
141、相对filter而言,map和reduce使用的会更频繁一些,filter正如其名字,按照某种规则过滤掉一些元素
142、利用用闭包的特性绑定预先绑定一些函数参数,返回一个可调用的变量,直到真正的调用执行
143、test_partial()
144、"test_second":test_second,
145、ifargs:
146、defwrer(*extra_args):
147、exec(compile(__file__f.read(),__file__,"exec"))
148、fun=partial(sum,2)#事先绑定一个参数,fun成为一个只需要一个参数的可调用变量
149、property装饰器
150、命令行处理
151、单引号的多行注释
152、printfilter(lambdax:x%2!=0,lst)
153、@score.setter#相当于score=property.setter(score)
154、classTestIter(object):
155、#使用范例
156、obj=TestIter()
157、在Python中,快速注释可以使用快捷键Ctrl+/来实现。
158、普通成员函数,其中第一个隐式参数为对象
159、ifexc_tracebackisNone:
160、print"__exit__method"
161、printgetattr(my_test,"test")
162、return_singleton
163、exec"test_second"inaction
164、deftest_third():
165、将property与装饰器结合实现属性私有化(更简单安全的实现get和set方法)
166、"para":5,
167、instances=dict()#初始为空
168、双引号的多行注释
169、deffoo(self,x):
170、deftest_three_method():
171、File"test_with.py",line33,in
172、deftest_eavl():
173、选中要注释的代码行或者将光标移到要注释的位置。
174、二、批量、多行注释符号
175、print"__enter__method"
176、add_help_option=None)
177、new_lst=lst[0]iflstisnotNoneelseNone
178、deftest_exec():
179、ifclsnotininstances:#如果不存在,则创建并放入字典
180、Returna2-tuple:(settingsobject,argslist).
181、对于多行注释,需要在需要注释的代码段前后分别添加三个双引号或单引号,注释段落中的每一行代码都不需要添加“#”符号。在注释时,需要注意注释的内容应该简明扼要、准确明了,不要过多地注释一些无关紧要的内容,以免影响代码的可读性。
182、obj=A()
183、test_exec()#无法看到执行结果
184、classmethod装饰器,类方法(给人感觉非常类似于OC中的类方法),其中第一个隐式参数为类
185、my_test=TestGetAttr()
186、详细原理可以查看这篇文章,浅谈Python的with语句
187、exec
188、python中的注释有多种,有单行注释,多行注释,批量注释,中文注释也是常用的。
189、settings,args=parser.parse_args(argv)
190、exceptAttributeError:
191、ExitedwithException
192、print"------分割线-----"
193、print"testmethod"
194、def__exit__(self,exc_type,exc_value,exc_traceback):
195、通过yield和__iter__的结合,我们可以把一个对象变成可迭代的
196、def_singleton(*args,**kwargs):
197、def__iter__(self):
198、ifargvisNone:
199、Exception
200、printrow
201、self.lst=[1,2,3,4,5]
202、通过string类型的name,返回对象的name属性(方法)对应的值,如果属性不存在,则返回默认值,相当于object.name
203、withMyWith()asmy_with:
204、快捷键Ctrl+/可以在大多数Python集成开发环境(IDE)中使用,如PyCharm、SublimeText、VSCode等。
205、test_iter()
206、#!/usr/bin/envpython
207、thenamedattributeofobject.namemustbeastring.Ifthestringis
208、deftest_first():
209、print"runningbeforeException"
210、__enter__method
211、if__name__=='__main__':
212、help='Showthishelpmessageandexit.')
213、else:
214、#函数输出
215、在Python中,快速注释的方法有两种:单行注释和多行注释。
216、returnnum
217、thenameofoneoftheobject’sattributes,theresultisthevalueof
218、print"AttributeError!"
219、只发一张网上的,然后差文档就好了,这个是记不住的
220、importcsv
221、exec在Python中会忽略返回值,总是返回None,eval会返回执行代码或语句的返回值
222、@singleton
223、一、python单行注释符号(#)
224、fromstorageimportStorage
225、getattr(object,name[,default])Returnthevalueof
226、runningmy_with
227、print1#输出1
228、withopen('data.csv','wb')asf:
229、三、特殊注释
230、print"hello"
231、pass
232、"test_second":test_second
233、writer.writerows(data)#多行写入
234、provided,otherwiseAttributeErrorisraised.
235、当发布python第三方package时,并不希望代码中所有的函数或者class可以被外部import,在__init__.py中添加__all__属性,
236、action={#可以看做是一个sandbox
237、deftest_getattr():
238、具体操作步骤如下:
239、enable_logging_to_kids,info)
240、字符串格式化
241、二、多行注释以及批量注释
242、('Lily','USA','12')]
243、File"test_with.py",line28,intest_with
244、def__enter__(self):
245、对于单行注释,只需要在需要注释的代码行前面添加“#”符号即可。
246、类中两种常用的装饰,首先区分一下他们
247、args=list(part_args)
248、test_with()
249、lst=[1,2,3,4,5,6]
250、iter魔法
251、#打印结果
252、"test_first":test_first,
253、classTestGetAttr(object):
254、print"MethodError!"
255、@property#相当于property.getter(score)或者property(score)
256、#向csv文件写入
257、if__name__=='_
258、在使用python编程时,避免不了会出现或使用中文的情况,这时候就需要在文件的第一行或者第二行(切记,一定只在这两个地方加)加上中文注释:#-*-coding:utf-8-*-或#coding=utf-8
259、filter的用法
260、#从csv中读取文件,基本和传统文件读取类似
261、argv=sys.argv[1:]
262、returnself.read()
263、A.static_foo("para")
264、test_first()
265、exceptAttributeError:#没有该属性,且没有指定返回值的情况下
266、executingclass_foo(
267、parser.add_option(#customizeddescription;put--helplast
268、def__init__(self):
269、Traceback(mostrecentcalllast):
270、obj.foo("para")#此处obj对象作为成员函数的隐式参数,就是self
271、obj.class_foo("para")#此处类作为隐式参数被传入,就是cls
272、printobj
273、'"%s"ignored.'%(args,))
274、raiseValueError('scoremustbeaninteger!')
275、defsum(a,b):
276、deftest_partial():
277、action={
278、fromutilimport(LogFormatter,disable_logging_to_stderr,
279、writer=csv.writer(f)
280、test_three_method()
281、该list中填写可以import的类或者函数名,可以起到限制的import的作用,防止外部import其他函数或者类
282、一个非常好用,很多人又不知道的功能
283、formatter=optparse.TitledHelpFormatter(width=78),
284、return3
285、getattr(my_test,"say")()
286、returnself#返回对象给as后的变量
287、>>>name="andrew"
288、testattribute
289、with的魔力
290、神秘eval
291、raiseException
292、#直接调用噗通的成员方法
293、testmethod
294、withopen('data.csv','rb')asf:
295、证明了会先执行__enter__方法,然后调用with内的逻辑,最后执行__exit__做退出处理,并且,即使出现异常也能正常退出
296、def__str__(self):
297、returnTrue
298、frombaseimportAPIBase
299、#所有奇数都会返回True,偶数会返回False被过滤掉
300、#furtherprocesssettings&argsifnecessary
301、defmain(argv=None):
302、#defineoptionshere:
303、reader=csv.reader(f)
304、return0#success
305、print"runningafterException"
306、try:
307、defscore(self,value):
308、'mynameisandrew'