Python默认编码为ASCII 在文件开头使用下面语句修改编码为UTF8
# coding=utf-8
Python不支持单个字符,即使单个字符也是一个字符串 字符串通过单引号或者双引号包围,三个单引号可以包围多行字符串 字符串对象结合下标运算可以获取对应位置字符(字符串) 通过[:]运算可以获取对应下标区间截取的子串
#!/usr/bin/python
var1 = 'Hello World!'
var2 = "Python Runoob"
print "var1[0]: ", var1[0]
print "var2[1:5]: ", var2[1:5]
Python中不需要主动在行末添加分号,会智能补齐
单行注释,通过在行的头部加上#,如
#这是注释
多行注释使用三个单引号或者三个双引号作为起止符,如
'''
这是注释
'''
"""
这是注释
"""
同时,三个单引号也可以作为多行字符串的输入,比如
words = ''' I am
eetal '''
Python中的变量不需要进行声明即可直接初始化 只有初始化以后的变量才会被创建,比如
#!/usr/bin/python
# coding=utf-8
counter = 100 # 赋值变量
print counter
Python中,非0和非空(null)值为true,0 或者 null为false
Python中,elif代表其他语言的else if。 Python的条件表达式不需要小括号包裹,在条件结尾加上冒号。 Python中,不使用花括号包括语句。 规定,相同缩进量的语句,默认被包裹为一个复合语句(一个缩进量为4个空格)。
if 判断条件1:
执行语句1……
elif 判断条件2:
执行语句2……
else:
执行语句4……
Python中的循环语句可以添加一个else子句,将会在循环正常执行结束后执行(非break)
for temp in sequence:
print(temp)
else:
print('end')
while 判断条件:
执行语句
else:
print('end')
Python的函数不需要指定返回值类型,通过def关键字定义函数 函数第一行缩进可以填写一串字符串常量,代表函数说明,不会作为代码编译 同样的,函数体不需要使用花括号,而是一个复合语句(满足一个以上单位的相对缩进的的语句为函数内部语句)
def name( parameters ):
"函数_文档字符串"
code
return [expression]
Python3新增参数和返回值注释,参数注释通过添加:在右侧编写,返回值注释通过在形参括号后,结束冒号前添加->,如何在->右侧编写注释。需要注意的是,如果形参有默认值,赋值语句应该放在注释之后
def f(age : '年龄默认22' = 22)->'返回值注释':
return age
def f(*args,**kwargs):
print(args)
print(kwargs)
f(1,2,3,name='yyt',age=22)
pass关键字代表一个空语句,主要为了占位置,满足程序结构(如空函数体等)
raise Exception("Invalid level!", 0)
try:
正常逻辑
except Exception,err:
触发自定义异常
else:
其余代码
try:
<语句>
finally:
<语句> #退出try时总会执行
raise
Python中可以通过del语句删除变量定义,则也接触了该变量引用对于值对象的引用关系 比如
a = 1
b = 2
del a,b
#下面语句报错,已经没有引用a
print(a)
# test.py
def call():
pass
则代码中可以通过模块名.成员名访问成员访问模块内部成员,如
import test
test.call()
import test
reload(test)
from test import call
call()
同时可以使用通配符*代表导入所有成员
from test import *
call()
list = [1,2]
tuple = (1,2)
dict = { 'key1':val1 , 'key2':val2 }
container = {1,2}
container = set()
container = set(1)
Python中采用实时引用计数gc和异步分代gc共同工作。 因为使用引用计数实时回收,所以性能损耗较大。 为了解决循环引用,还开启一个异步的分代gc。
Python中的类内部方法,包含实例方法、类方法、静态方法三种
class A:
__i = 5
_j = 6
class B(A):
c = A._j
print(B.c)
#下面语句报错
#print(A.__i)
class MyClass:
def __init__(self):
print('init')
def __del__(self):
print('del')
# 实例化类
x = MyClass()
del x
class B:
c = 5
def call(self,i):
self.s = i
print(B.c)
b = B()
b.call(999)
b.x = 5
print(b.x)
print(b.s)
class MyClass:
i = 0
def f(self):
return 'hello world'
def __init__(self, _i):
self.i = _i
# 实例化类
x = MyClass(5)
print(x.i)
x.f()
class MyClass:
@staticmethod
def f():
return 'hello world'
MyClass.f()
class MyClass:
i = 0
def __init__(self, _i):
self.i = _i
@classmethod
def create(cls,_i):
#使用一个参数的构造函数
obj = cls(_i)
return obj
instance = MyClass.create(5)
class Man:
def __init__(self, name):
self.name = name
def call(self):
print('man call')
class Alive:
def call(self):
print('Alive call')
class Stu(Alive,Man):
def __init__(self, name):
#调用父类构造
Man.__init__(self, name)
#或者使用下面这种super写法
#super(Stu,self).__init__(self, name)
stu = Stu('yyt')
#ouput : Alive call
stu.call()
import abc
class Foo(abc.ABC):
@abc.abstractmethod
def fun(self):
pass
#下面语句报错
a = Foo()
Python中的泛型函数需要借助基本库里的functools模块 被@singledispatch注解修饰的方法为泛型方法 通过@方法名.register注解修饰其他方法,标记为泛型方法的实现,并标记方法形参第一个参数的泛型
from functools import singledispatch
@singledispatch
def add(obj, new_obj):
raise TypeError
@add.register(int)
def _(obj, new_obj):
return obj + new_obj
@add.register(list)
def _(obj, new_obj):
return obj.extend(new_obj)
add(1,2)
add([1,2],[3])
Python通过两个标准库thread和threading提供对线程的支持。 Python多线程提供了两种实现方式,基于函数以及基于类的实现。
#!/usr/bin/python
# -*- coding: UTF-8 -*-
import thread
import time
# 为线程定义一个函数
def print_time( threadName, delay):
count = 0
while count < 5:
time.sleep(delay)
count += 1
print "%s: %s" % ( threadName, time.ctime(time.time()) )
# 创建两个线程
try:
thread.start_new_thread( print_time, ("Thread-1", 2, ) )
thread.start_new_thread( print_time, ("Thread-2", 4, ) )
except:
print "Error: unable to start thread"
while 1:
pass
#!/usr/bin/python
# -*- coding: UTF-8 -*-
import threading
import time
exitFlag = 0
class myThread (threading.Thread): #继承父类threading.Thread
def __init__(self, threadID, name, counter):
threading.Thread.__init__(self)
self.threadID = threadID
self.name = name
self.counter = counter
def run(self): #把要执行的代码写到run函数里面 线程在创建后会直接运行run函数
print "Starting " + self.name
print_time(self.name, self.counter, 5)
print "Exiting " + self.name
def print_time(threadName, delay, counter):
while counter:
if exitFlag:
(threading.Thread).exit()
time.sleep(delay)
print "%s: %s" % (threadName, time.ctime(time.time()))
counter -= 1
# 创建新线程
thread1 = myThread(1, "Thread-1", 1)
thread2 = myThread(2, "Thread-2", 2)
# 开启线程
thread1.start()
thread2.start()
print "Exiting Main Thread"
threading模块中,提供Lock类(锁)和RLock类(可重入锁)。 每种锁中都有以下方法:
import threading
rlock = threading.RLock()
rlock .lock()
rlock.realease()
Python中提供装饰器注解,可以通过注解,对函数进行aop(切面编程)
def decorator_maker_with_arguments(decorator_arg1, decorator_arg2):
print "I make decorators! And I accept arguments:", decorator_arg1, decorator_arg2
def my_decorator(func):
print "I am the decorator. Somehow you passed me arguments:", decorator_arg1, decorator_arg2
def wrapped(function_arg1, function_arg2) :
print ("I am the wrapper around the decorated function.\n"
"I can access all the variables\n"
"\t- from the decorator: {0} {1}\n"
"\t- from the function call: {2} {3}\n"
"Then I can pass them to the decorated function"
.format(decorator_arg1, decorator_arg2,
function_arg1, function_arg2))
return func(function_arg1, function_arg2)
return wrapped
return my_decorator
@decorator_maker_with_arguments("Leonard", "Sheldon")
def decorated_function_with_arguments(function_arg1, function_arg2):
print ("I am the decorated function and only knows about my arguments: {0}"
" {1}".format(function_arg1, function_arg2))
decorated_function_with_arguments("Rajesh", "Howard")
比如上述的
@decorator_maker_with_arguments("Leonard", "Sheldon")
def decorated_function_with_arguments(function_arg1, function_arg2):
.....
最终进行切面编程后,实际调用被装饰函数decorated_function_with_arguments时,会改为使用
temp = decorator_maker_with_arguments("Leonard", "Sheldon")(decorated_function_with_arguments)(function_arg1, function_arg2)
class A:
a = 1
obj = A()
print(dir(obj))
class A:
a = 1
obj = A()
setattr(obj,'a',2)
print(obj.a)
class A:
def show(self):
print('show')
def look():
print('look')
obj = A()
fun1 = getattr(obj,'show')
fun2 = getattr(A,'look')
fun1()
fun2()
class A:
pass
obj = A()
obj.a = 5
delattr(obj,'a')
print('Go ahead')
#下面语句会报错
print(obj.a)