Python初识2
27、Python中没有{}括起来的代码块,使用pass来代替c语言中的{(无内容)};
28、使用__name__来指示模块是如何加载的,如果是被导入的,那么__name__就是该模块的名字,如果是直接执行的,那么__name__就是’__main__’;
29、异常捕获:使用try...excepti...except...或者try...finally...,抛出异常使用raise,不像java和c++一样可以讲try..catch...finally一起使用;
30、Python中函数的参数列表中的参数有5种:位置参数、缺省参数、可变长参数和关键字可变长参数。位置参数就是一般的参数,必须传值给他;缺省参数就是c++中的带有默认值的参数,可变长参数就是c#中的那个params,可以传递不确定个数的参数,关键字可变长参数可以看做是可变长参数的一种,只是他是用来传递键值对(字典)的;这四种参数的先后顺序为:位置参数,缺省参数,可变长参数,关键字可变长参数;例子:
def fun(a,b=1,*c,**d):
print(a);print(b);
for ele in c:
print(ele)
for ele in d.keys():
print(ele,'=',d[ele])
31、Python中有global关键字,用来声明即将使用的变量是一个全局变量,因为有时候局部变量和全局变量重名的时候,局部变量会覆盖全局变量,为了使用全局变量,我们需要使用global在函数中声明;
32、Python允许函数的嵌套定义,但是不管怎样定义,函数所能使用的变量最多只有两种:自己定义的局部变量和全局变量。比如下面的访问的:
def fun1():
a=1;
def fun2():
a=10
b=a+1
print(a,b)
fun2()
print('a=',a)
fun1()
结果输出为:
10 11
a= 1
其实在这里如果没有a=10这句代码的话那么b的值就是2;
33、global()和locals()分别以字典的形式返回当前作用域下的全局变量和局部变量:
def fun():
print('in foo')
aString='bar'
aInt=1
print(globals())
print(locals())
print('main globals ',globals())
print('main locals()',locals())
fun()
程序输出为:
main globals {'__name__': '__main__', '__spec__': None, '__package__': None, '__loader__': <_frozen_importlib.SourceFileLoader object at 0x0000000002181710>, '__cached__': None, '__file__': 'F:\\CreationExercises\\pythonWorkspace\\HelloWorld\\first\\HelloWorld.py', '__doc__': None, 'fun': <function fun at 0x00000000021DDE18>, '__builtins__': <module 'builtins' (built-in)>}
main locals() {'__name__': '__main__', '__spec__': None, '__package__': None, '__loader__': <_frozen_importlib.SourceFileLoader object at 0x0000000002181710>, '__cached__': None, '__file__': 'F:\\CreationExercises\\pythonWorkspace\\HelloWorld\\first\\HelloWorld.py', '__doc__': None, 'fun': <function fun at 0x00000000021DDE18>, '__builtins__': <module 'builtins' (built-in)>}
in foo
{'__name__': '__main__', '__spec__': None, '__package__': None, '__loader__': <_frozen_importlib.SourceFileLoader object at 0x0000000002181710>, '__cached__': None, '__file__': 'F:\\CreationExercises\\pythonWorkspace\\HelloWorld\\first\\HelloWorld.py', '__doc__': None, 'fun': <function fun at 0x00000000021DDE18>, '__builtins__': <module 'builtins' (built-in)>}
{'aString': 'bar', 'aInt': 1}
34、reload()函数使用前提:模块之前被导入过,而且不是用from import导入的;参数必须是模块本身;reload()的意义:模块中的代码只会执行一次,reload之后同样也不会执行第二次,其作用在于绑定模块名字;
35、阻止某个属性被绑定:当使用import from 导入模块属性的时候,只要将不需要的属性前面加一个下划线就好了,另外那些带有下划线的属性本身就不会被导入;
36、类:Python中的类没有静态方法,这也就意味着所有的函数都应该通过实例进行访问,其次在类中定义的属性,都是静态属性,想要定义实例属性一般有两种方式,一个是通过构造函数(__init__),另外就是当使用构造函数生成对象之后再添加实例属性,道理上来说静态属性应该通过类名进行访问,但是通过实例也可以访问到,当定的实例变量和静态变量重名的时候使用实例访问到的是实例属性,所以对于静态变量,使用类名进行访问才是正确的姿势。除此之外,Python中也有类似c++中的析构函数,为__del__。其次,建议为每一个类都定义__inti__函数,和java与c++不一样的是如果本类没有定义自己的init方法,他就会去调用父类的,如果定义了自己的,那么父类的就不会被调用,如果想要调用父类的构造方法可以通过父类的类名调用。附一段代码:
class B:
count=0;
def __init__(self):
self.count=self.count+1;
B.count=B.count+1
def __del__(self):
self.count=self.count-1;
B.count=B.count-1
a=B();
a.name='cao'
a.count=10
c=B();
c.name='guanjie'
c.count=30
print(a.name,c.count,B.count)
程序的输出为:
cao 30 2
37、实例有两个重要的属性__class__和__dict__,通过实例进行访问,返回类type和以字典为形式的属性,另外可以通过dir来得到某个实例的所有实例属性