1 python定义方法可以在本方法内调用其他的方法
2 要在另一个python中使用别的方法要引用该方法所在模块
3 一个函数内出现return,则代表函数结束
4 and or 是逻辑运算符
5 del关键字,把变量从内存中删除,可以是列表的元素
6 列表操作符:列表的下标索引与c类似 [list]
append(event)加到后面加一个元素,extend(list)可以加一堆
insert(num,string)把string插到num后面
pop(num)删除指定位置上的元素
remove(event),指定删除这个元素
clear()清除全部的元素
index(event)显示元素在列表中的位置
len(list)查看该列表元素个数
count(event),统计event出现的次数
sort()默认是升序排序,若要降序则sort(reverse=True)则代表着列表降序排序
del list[num]直接删除列表中的元素
在使用列表时,可以通过for循环来遍历列表中的所有元素
7 元组操作符(tuple)
取值与列表类似,下标取值
index(event)得出event在元组中的位置
count(event)得出event出现的次数
len(tuple)得出元组长度
遍历的时候与列表类似,使用for循环 for char in mytuple:
8 格式化字符串"%s年龄是%d身高%.2f" % ('xiaoming', 18, 1.75)
9 字典操作符{dict}
定义:字典是由键值对构成{'key':num}
取值:dict['key'],用字典名加键的名字即可得到对应得值
修改的话与取值的操作类似
pop('key'),删除键对应的值
len(dict),计算键值对数量
update(dict)合并两个字典,括号里的字典加载在后面,类似于extend()
clear()清空字典
字典的遍历与前面两个有一点不一样,是成对出现的
for key in xiaoming_dict:
print("%s - %s" % (key, dict['key']))
应用场景,在列表内当做不同人信息的分割,可以当作信息管理系统的东西
10 字符串的应用,
str='***'可以通过下标来访问str[num],
及字符串名字来输出,遍历与列表元组类似
count(event),计算event出现的次数,没有结果为0
index(event),找出这个event在字符串内第一次出现的位置
isspace()判断字符串内是否有空格,有的话True
isdigit()判断是否纯数字(不能判断小数)
isdecimal()判断是否10进制
isnumeric()判断是否都是数值
startswith(string)判断字符串是否以string开头
endswith(string)判断字符串是否以string结尾
find(string)查找指定字符串,找不到会报错
replace(string1,string2),用string2替换原来字符串里的string1,
且不改变原来字符串,等于新建了一个字符串
strip()删除字符串内的空格
split(char)以char把字符串拆分,拆完的格式是列表的形式
'string2'.join(string1),把字符串string2拼接到string1的后面
字符串遍历的应用str.center(num,'char'),字符串长度num,且居中,空白处char填补
str.rjust(num,'char'),右对齐
str.ljust(num,'char'),左对齐
11 break跳出当前循环,进入下面的代码块
12 continue 跳出当此循环,进入下一次循环
13 注意代码块对其格式for后面也能跟else
例for**:
else:
如果其中有break达成条件后,直接跳出for循环,不执行else内容
break是对循环来讲的,if是分支语句不在break的范畴内
14 局部变量和全局变量的区别,局部变量的生存周期只在其所在的方法内,出了之后就消除,而全局变量,在整个python文件内都可以调用。函数是不能修改全局变量的值
若想要用函数来修改全局变量的值,要告诉解释器在函数内不创造局部变量,用关键字
global num 来声明num,然后对其进行操作。全局变量一般放在函数开头,模块导入处
15 return多个返回值,返回的是一个元组
16 python里面两个数字进行交换,不需要用第3个变量来交换,直接a,b=b,a,就可以将二者 值交换
17 缺省参数问题:如果一个方法内有固定的参数,则在调用该方法的时候可以省略那个已 经确定了的参数
例如
def print_info(name, gender=True):
print_info("老王")
print_info("小美", False)
18 类的定义一般在括号内加object,修改参数来改变初始值 初始化方法_init_(self)
class Cat(object):
def __init__(self, new_name):
print("这是一个初始化方法")
self.name = new_name
def eat(self):
print("%s 爱吃鱼" % self.name)
tom = Cat("Tom")
19 类中的_del_方法 _del_(self)
def __del__(self):
print("%s我去了" % self.name)
del tom
使用后,直接删除这个对象
20 类中的_str_方法 _str_(self)
def __str__(self):
return "我是小猫[%s]" % self.name
这些方法都会被调用
_str_如果类内定义了_str_(self)方法,return一定会被类创建的对象调用
如果用类创建了对象object,那么print(object),结果就是返回_str_内的值
21 私有属性和方法
def __init__(self, name):
self.name = name
self.__age = 18
# __age,两下划线私有属性
# def __secret(self):
def secret(self):
print("%s 的年龄是%d" % (self.name, self.__age))
# 对象的方法内部能够正常访问
#私有方法也不能在外界调用使用
虽然外界不能直接使用私有属性,但是可以由创建的对象来调用私有方法,从而访问私有属性
但是可以加类名来访问私有属性
class Women:
def __init__(self, name):
self.name = name
self.__age = 18
# __age,两下划线私有属性
def __secret(self):
# def secret(self):
print("%s 的年龄是%d" % (self.name, self.__age))
# 对象的方法内部能够正常访问
# 私有方法也不能在外界调用使用
# 可以用_加类名访问私有属性
xiaofang = Women("小芳")
print(xiaofang._Women__age)
xiaofang._Women__secret()
22 继承子类拥有父类的所有属性和方法
class Animal:
def eat(self):
print("吃")
class Dog(Animal): # 继承
def bark(self):
print("汪汪叫")
就是用子类创建一个对象时,可以调用父类的eat(),还可以使用自己的bark()
继承还具有传递性,儿子继承父亲,父亲继承爷爷,就是儿子同时拥有父亲和爷爷的所有方法和属性
23 子类方法覆盖父类,在子类中重新定义该方法即可,在对象调用时优先调用子类的方法,要想在子类内继续用父类的方法,可以用到super
def bark(self):
print("叫的跟神一样")
# 在子类中重写该方法
# 为了子类重写后仍能调用父类的方法
super().bark()
# Dog.bark(self)或者这样,必须有self
print("awdwadawdad")
# 自己不能调用自己,不然死循环
24 子类对象调用父类私有属性及方法的方式
让子类创建一个对象,可以直接调用父类的共有初始化参数,可以调用父类的共有方法,让父类的共有方法去调用父类的私有方法即可,私有方法再去调用私有初始话参数
25 多继承:一个子类可以继承多个父类
class C(A, B):
多继承的父类属性相同时,谁先被子类继承,则用的是谁的方法,先入为主
26 类属性:每创建一个对象,类初始化方法就被调用一次
class Tool(object):
count = 0
def __init__(self, name):
self.name = name
# 让类属性加1
Tool.count += 1
tool1 = Tool("斧头")
tool2 = Tool("榔头")
tool3 = Tool("起子")
print("工具对象总数 %d "% tool3.count)
print("==>%d" % Tool.count)
27 静态方法、类方法
在方法定义前面加@staticmethod
class Dog(object):
@staticmethod
def run():
print("小狗偶要跑")
# 通过类名.的方式调用静态方法
在方法前面加@classmethod
@classmethod
def show_tool_count(cls):
print("工具对象数量%d" % cls.count)
28_new_()方法,是一种类方法,为对象分配空间
def __new__(cls, *args, **kwargs):
print("创建对象,分配空间")
# 为对象分配空间
instance = super().__new__(cls)
# 返回对象引用
return instance
class MusicPlayer(object):
instance = None
def __new__(cls, *args, **kwargs):
if cls.instance is None:
cls.instance = super().__new__(cls)
return cls.instance
# __new__分配空间
# __init__对象初始化
player1 = MusicPlayer()
print(player1)
player2 = MusicPlayer()
print(player2)
29 类内变量是静态的static
**为模块指定别名
import hm_01_测试模块1 as DogMoule
import hm_02_测试模块2 as CatMoule
从别的模块导入方法,直接用这个方法名就可以
from hm_01_测试模块1 import Dog
from hm_02_测试模块2 import say_hello
从一个模块导入全部方法,好处就是不用每次都打模块的名字了
from hm_01_测试模块1 import *
from hm_02_测试模块2 import *
把需要的方法用as再次改名,用来区分
from hm_01_测试模块1 import say_hello as moudle1_say_hello
from hm_02_测试模块2 import say_hello
30 异常检测,抛出异常
try:
num = int(input("请输入一个整数:"))
except:
print("请输入正常的整数")
print("-"*50)
当输入r的时候不再是直接错误,而是执行except里的内容
当发生错误赋值的时候,一般解释器都会给出错误类型,而我们就可以给出抛出的异常类型
try:
num = int(input("请输入一个整数:"))
result = 8 / num
print(result)
except ZeroDivisionError:
print("除0错误")
except ValueError:
print("请输入正确的整数")
我们可以不管其他的错误,直接当作未知错误
except Exception as result:
print("未知错误 %s" % result)
完整的异常及捕获操作
try:
num = int(input("请输入一个整数:"))
result = 8 / num
print(result)
except ValueError:
print("请输入正确的整数")
except Exception as result:
print("未知错误 %s" % result)
else:
print("尝试成功")
finally:
print("无论是否正确都会执行")
print("-"*50)
抛出异常
# 碰到return直接退出函数,下面代码不执行
def input_password():
pwd = input("请输入密码:")
if len(pwd) >= 8:
return pwd
print("主动抛出异常")
# 1. 创建异常对象
ex = Exception("密码长度不够")
# 2. 主动抛出异常
raise ex
try:
print(input_password())
except Exception as result:
print(result)
31 文件操作
# 1.打开文件
file = open("README")
# 2.读取文件内容
text = file.read()
print(text)
# 3.关闭文件,打开关闭是一对
file.close()
在读取文件后,文件的指针会发生变化,没有关闭文件,再次打开时文件指针指向文件尾部
# 1.打开文件
file = open("README")
# 2.读取文件内容
text = file.read()
print(text)
print(len(text))
print("-"*50)
text = file.read()
print(text)
print(len(text))
# 3.关闭文件,打开关闭是一对
file.close()
文件的一些操作符
file = open("README", "a")
# open默认只读方式打开方式
# a 追加不覆盖
# w 覆盖前面的内容
# r+ 读写打开文件
# w+ 读写打开文件, 文件不存在创建新文件
# a+ 读写,追加, 不存在时创建新文件
file.write("\nhello")
file.close()
分行读取文件
file = open("README")
while True:
text = file.readline()
if text == "": # if not text:
break
print(text)
file.close()
小文件的复制操作
# 小文件的复制操作
# 1. 打开文件
file_read = open("README")
file_write = open("README[附件]", "w")
# 2. 读写操作
text = file_read.read()
file_write.write(text)
# 3. 关闭文件
file_read.close()
file_write.close()
大文件的复制工作,打开要复制的文件,读取它,每次读取的内容,再原封不动的写到空文件里
# 小文件的复制操作
# 1. 打开文件
file_read = open("README")
file_write = open("README[附件]", "w")
# 2. 读写操作
while True:
text = file_read.readline()
if not text:
break
file_write.write(text)
# 3. 关闭文件
file_read.close()
file_write.close()
32 eval函数
eval(input_str)
可以直接计算表达式的值