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