运算符
Python语言支持逻辑运算符,以下假设变量 a 为 10, b为 20:
除了以上的一些运算符之外,Python还支持成员运算符,测试实例中包含了一系列的成员,包括字符串,列表或元组。
优先级
以下表格列出了从最高到最低优先级的所有运算符:
条件判断 & 循环
条件判断基本语法格式
if 判断条件: 执行语句…… else: 执行语句……
第二种elif
if 判断条件1: 执行语句1…… elif 判断条件2: 执行语句2…… elif 判断条件3: 执行语句3…… else: 执行语句4……
循环
str1 = "zheshi1sda" """ i 代表当前索引元素 str1 代表需要索引的元素 """ for i in str1: print("当前字母为 : " + i) # range(1, len(str1), 2) """ 其中 index表示 : 索引位置 range(1, len(str1), 2) 1代表 : 索引的起始位置 len(str1)代表 : 索引的结束位置 2代表 : 索引的步数 """ for index in range(1, len(str1), 2): print(str1[index] + " 是当前字母")
while 判断条件(condition): 执行语句(statements)……
日期时间
localTime = time.localtime(time.time()) print(localTime) print(localTime.tm_year) # todo 格式化时间 # todo 格式化成2016-03-20 11:45:39形式 print(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())) # todo 格式化成Sat Mar 28 22:24:24 2016形式 print(time.strftime("%a %b %d %H:%M:%S %Y", time.localtime())) # todo 将格式字符串转换为时间戳 a = "Sat Mar 28 22:24:24 2016" print(time.mktime(time.strptime(a, "%a %b %d %H:%M:%S %Y")))
格式化日期符号
python中时间日期格式化符号:
- %y 两位数的年份表示(00-99)
- %Y 四位数的年份表示(000-9999)
- %m 月份(01-12)
- %d 月内中的一天(0-31)
- %H 24小时制小时数(0-23)
- %I 12小时制小时数(01-12)
- %M 分钟数(00-59)
- %S 秒(00-59)
- %a 本地简化星期名称
- %A 本地完整星期名称
- %b 本地简化的月份名称
- %B 本地完整的月份名称
- %c 本地相应的日期表示和时间表示
- %j 年内的一天(001-366)
- %p 本地A.M.或P.M.的等价符
- %U 一年中的星期数(00-53)星期天为星期的开始
- %w 星期(0-6),星期天为星期的开始
- %W 一年中的星期数(00-53)星期一为星期的开始
- %x 本地相应的日期表示
- %X 本地相应的时间表示
- %Z 当前时区的名称
- %% %号本身
获取某月日历
cal = calendar.month(2016, 1) print(cal)
相关函数API
Time模块
Time模块包含了以下2个非常重要的属性:
日历模块
函数
简单语法
你可以定义一个由自己想要功能的函数,以下是简单的规则:
- 函数代码块以 def 关键词开头,**后接函数标识符名称和圆括号()**。
- 任何传入参数和自变量必须放在圆括号中间。圆括号之间可以用于定义参数。
- 函数的第一行语句可以选择性地使用文档字符串—用于存放函数说明。
- 函数内容以冒号起始,并且缩进。
- return [表达式] 结束函数,选择性地返回一个值给调用方。不带表达式的return相当于返回 None。
def greet(name): """打招呼""" print("Hello, " + name + "!")
I/O 文件
Python 提供了必要的函数和方法进行默认情况下的文件基本操作。你可以用 file 对象做大部分的文件操作。
open 函数
你必须先用Python内置的open()函数打开一个文件,创建一个file对象,相关的方法才可以调用它进行读写。
语法:
file object = open(file_name [, access_mode][, buffering])
各个参数的细节如下:
- file_name:file_name 变量是一个包含了你要访问的文件名称的字符串值。
- access_mode:access_mode决定了打开文件的模式:只读,写入,追加等。所有可取值见如下的完全列表。这个参数是非强制的,默认文件访问模式为只读(r)。
- buffering:如果buffering的值被设为0,就不会有寄存。如果buffering的值取1,访问文件时会寄存行。如果将buffering的值设为大于1的整数,表明了这就是的寄存区的缓冲大小。如果取负值,寄存区的缓冲大小则为系统默认。
不同模式打开文件的完全列表:
if __name__ == '__main__': fo = open("hello.txt", "w") print(fo.name) print(fo.mode) print(fo.encoding) fo.write("这是一个请开个") fo.write("www.runoob.com!\nVery good site!\n") fo.close() fw = open("hello.txt", "r+") """ 可以在read中添加数字, 其代表的是读取出的字符 """ str1 = fw.read() print(str1) fw.close()
文件定位
# 打开一个文件 fo = open("foo.txt", "r+") str = fo.read(10) print("读取的字符串是 : ", str) # 查找当前位置 position = fo.tell() print("当前文件位置 : ", position) # 把指针再次重新定位到文件开头 position = fo.seek(0, 0) str = fo.read(10) print("重新读取字符串 : ", str) # 关闭打开的文件 fo.close()
重命名文件 和 删除文件
ython的os模块提供了帮你执行文件处理操作的方法,比如重命名和删除文件。
要使用这个模块,你必须先导入它,然后才可以调用相关的各种功能。
rename() 方法
rename() 方法需要两个参数,当前的文件名和新文件名。
语法:
os.rename(current_file_name, new_file_name)
remove()方法
你可以用remove()方法删除文件,需要提供要删除的文件名作为参数。
语法:
os.remove(file_name)
目录操作
所有文件都包含在各个不同的目录下,不过Python也能轻松处理。os模块有许多方法能帮你创建,删除和更改目录。
mkdir()方法
可以使用os模块的mkdir()方法在当前目录下创建新的目录们。你需要提供一个包含了要创建的目录名称的参数。
语法:
os.mkdir("newdir")
chdir()方法- –改变
可以用chdir()方法来改变当前的目录。chdir()方法需要的一个参数是你想设成当前目录的目录名称。
语法:
os.chdir("newdir")
getcwd() 方法—显示
getcwd()方法显示当前的工作目录。
语法:
os.getcwd()
rmdir()方法—删除
rmdir()方法删除目录,目录名称以参数传递。
在删除这个目录之前,它的所有内容应该先被清除。
语法:
os.rmdir('dirname')
文件相关的API
https://www.runoob.com/python/os-file-methods.html
异常处理
基本使用
try: <语句> #运行别的代码 except <名字>: <语句> #如果在try部份引发了'name'异常 except <名字>,<数据>: <语句> #如果引发了'name'异常,获得附加的数据 else: <语句> #如果没有异常发生
捕捉异常可以使用try/except语句。
try/except语句用来检测try语句块中的错误,从而让except语句捕获异常信息并处理。
如果你不想在异常发生时结束你的程序,只需在try里捕获它。
if __name__ == '__main__': try: fo = open("hello.txt", "w") print(fo.name) print(fo.mode) print(fo.encoding) fo.write("这是一个请开个") fo.write("www.runoob.com!\nVery good site!\n") fo.close() read = fo.read() print(read) except Exception as message: print("出现异常", message.args) else: print("无异常") finally: # 不管发生什么都需要执行的代码
面向对象技术
class ClassName: '类的帮助信息' #类文档字符串 class_suite #类体
创建类
class Employee: '所有员工的基类' empCount = 0 # 第一种方法__init__()方法是一种特殊的方法,被称为类的构造函数或初始化方法,当创建了这个类的实例时就会调用该方法 # self 代表类的实例,self 在定义类的方法时是必须有的,虽然在调用时不必传入相应的参数。 def __init__(self, name, salary): self.name = name self.salary = salary Employee.empCount += 1 def displayCount(self): print "Total Employee %d" % Employee.empCount def displayEmployee(self): print "Name : ", self.name, ", Salary: ", self.salary
self代表类的实例,而非类
类的方法与普通的函数只有一个特别的区别——它们必须有一个额外的第一个参数名称, 按照惯例它的名称是 self。
而 __self.class__ 则指向类。
继承类—-类的继承
面向对象的编程带来的主要好处之一是代码的重用,实现这种重用的方法之一是通过继承机制。
通过继承创建的新类称为子类或派生类,被继承的类称为基类、父类或超类。
继承语法
class 派生类名(基类名) ...
在python中继承中的一些特点:
1、如果在子类中需要父类的构造方法就需要显式的调用父类的构造方法,或者不重写父类的构造方法。
2、在调用基类的方法时,需要加上基类的类名前缀,且需要带上 self 参数变量。区别在于类中调用普通函数时并不需要带上 self 参数
3、Python 总是首先查找对应类型的方法,如果它不能在派生类中找到对应的方法,它才开始到基类中逐个查找。(先在本类中查找调用的方法,找不到才去基类中找)。
如果在继承元组中列了一个以上的类,那么它就被称作”多重继承” 。
语法:
派生类的声明,与他们的父类类似,继承的基类列表跟在类名之后,如下所示:
class SubClassName (ParentClass1[, ParentClass2, ...]): ...
类属性和方法
类的私有属性
__private_attrs:两个下划线开头,声明该属性为私有,不能在类的外部被使用或直接访问。在类内部的方法中使用时 self.__private_attrs。
类的方法
在类的内部,使用 def 关键字可以为类定义一个方法,与一般函数定义不同,类方法必须包含参数 self,且为第一个参数
类的私有方法
__private_method:两个下划线开头,声明该方法为私有方法,不能在类的外部调用。在类的内部调用 self.__private_methods
class JustCounter: __secretCount = 0 # 私有变量 publicCount = 0 # 公开变量 def count(self): self.__secretCount += 1 self.publicCount += 1 print self.__secretCount counter = JustCounter() counter.count() counter.count() print counter.publicCount print counter.__secretCount # 报错,实例不能访问私有变量
Python不允许实例化的类访问私有数据,但你可以使用 **object._className__attrName**( 对象名._类名__私有属性名 )访问属性
单下划线、双下划线、头尾双下划线说明:
__foo__: 定义的是特殊方法,一般是系统定义名字 ,类似 init() 之类的。
_foo:以单下划线开头的表示的是 protected 类型的变量,即保护类型只能允许其本身与子类进行访问,不能用于 from module import *
__foo: 双下划线的表示的是私有类型(private)的变量, 只能是允许这个类本身进行访问了。
通过使用get/set__私有属性 ,来操作私有属性, 而不是直接通过类名来操作 。这样符合类的操作规范
注意事项
print输出相关
如果输出的数据类型是基本类型 ,也就是 int 、float 、 complex等等。 那么就不能用字符串拼接的方法输出
# count确定是int类型 print("元素21在元组中出现的次数: ", count) # 不能用 + 来连接
快速生成变量名
Ctrl + Alt + V