基本语法
- 注释是加# 多行注释是”’ ”’或者”“” “””
- id(变量)获取变量的存储地址
- 如果python里面有中文,可以在开头加#-- coding:utf-8 --
- 获取用户输入的信息input(‘请输入你的年龄’)input输入的都是字符串,如果你输出使用%d要类型转换
输出使用函数print(变量)如果一个print要输出多个变量可以(print(a,end=”)这是把print输出的最后的换行替换)
a = 34;//%d %f %s(字符串) print('a的值是%d'%a) print("%s%d%f"%(a,b,c))
- 类型可以使用type查看当前变量是什么类型
if判断
if a < 10: print(2) else: print(10)
int(变量)类型转换(Number(int,float,double,复数) Boolean String等)
- a/b 直接除 a//b取商 a%b取余 a*b a**b(这是次方)可以字符串直接乘以几
if else for while
- if elif elif else
- 或 or 且 and 或者这样if not (条件):这是不在这个条件中
- while a < 10:
- 变量自加 a += 1 a = a + 1;不能a++
- for循环是for v in a(a是变量,v是变量里面的) break continue
- for : else: 如果for里面有break则else不会执行
字符串
- str()转换成字符串 len(a)得到字符串的长度
- 两个字符串相加是a + b
- 字符串通过下表取值,-1 最后一个。
- 字符串的取片就是截取字符串的一部分a[2:5] a[2:-1]如果第二个值没有写,就是直接取到最后,如果想要隔一取一就是a[1:-1:2],逆序a[::-1]
- 关于字符串的函数
- a.find(‘li’)查询字符串中是否包含li这个字符串 如果有返回第一个字符出现的位置,如果没有-1
- a.rfind()从右边
- a.index(字符串)找不到会抛异常rindex
- a.count(‘li’)出现的次数
- a.replace(原来的,要替换成啥,要替换几个)会生成一个新的变量
- split通过一个标志切割字符串,转换成列表
- endswitch(‘.txt’)结尾是否这个结尾相对应的有startswitch()
列表
- 就是PHP的数组,可以存不同的数据类型
- 增删改查
- 添加 a.append(变量) insert(位置,变量) extend(列表)(两个列表合并)
- 删除a.pop()删除从最后删除,a.remove(属性)删除特定内容 del a[0]删除第一个元素
- 修改 name[0] = ‘aaa’
- 查询判断一个字段是否在列表中 v in name
字典
name = {‘name’:’li’,’age’:23,’add’:’郑州’}
- 添加 name[‘key’]或赋值
- 删除del name[key]
- 查询name[key] name.get(key)如果用get就不会报错
len
name = {‘name’:’李佳飞’}name.keys()得到字典的键 name.values()得到值
元祖使用()它一旦定义就不可改变 列表用[] 字典用{}
函数
- def 函数名(a,b,c,d):return 变量
- 返回可以使用return a,b,c or (a,b,c) or [a,b,c]
- 在函数内修改变量需要global 变量,然后才能修改全局变量
- 如果函数的参数不确定,那么参数前面使用,test(a,b,*c),多出来的参数都会保存到c中是个元祖,不可改变,如果传过去的参数带键,那个可以使用两个接受,最后是字典
- 匿名函数的lambda
- 全局变量是否改变,要看这个全局变量是否可变,可变就列表和字典
文件操作
- 打开一个文件使用open(‘文件名’,’操作方式’)
- r读 w写 a 写在末尾 w 和a 文件不存在会创建
- rb wb ab 以二进制的形式打开文件
- r+ w+ a+ 进行读写,但是w和a文件不存在会创建文件
- f.close()关闭文件,会刷新
- f.read(i)读取文件中的全部文件,i表示读取几个字节,读取之后,指针指向后面。
- f.write(content)写入文件
- readline()读取一行 加s会把文件的每一行保存在列表中
- 如果要操作大文件使用reand(字节1024)通过循环不停的读,然后通过len(index)判断长度
- 如果读取文件想从一个特定的位置读取,使用seek(偏移量,0) 0 从文件的开头 1 从当前位置 2 从文件的末尾
- 修改文件 引入os,rename(old,new)
- remove(name)移除也就是删除
- os.mkdir创建
- os.rmdir删除文件夹
- os.getcwd()得到当前路径
- os.chdir(”)改变当前路径,表示在这个文件进行所有操作
- os.listdir(‘./’)路径下的文件
面向对象
- 类有类名属性 方法组成
-
class Test:
a = 1
def getNumber(self):
pass - 创建对象 a = Test()
- 创建完对象就可以动态的添加属性(Python和PHP都是动态语言)
- 类的方法第一个参数是self这个程序会自动添加当前对象
- 类的构造方法 def __init__(self)
- __str__直接打印对象如果写这个方法,会自动打印这个方法里面的内容
- 如果想把方法设置为私有的方法名前面加两个下划线
- 如果一个对象通过del删除后,如果类里面写了del方法,就会自动执行
- 继承通过class 类名(基类)
- 重写是子类重写父类的方法,如果子类要调用父类的方法通过基类名.方法名(self)或者super().bark()
- 父类的私有方法也就是方法名前面两个下划线的方法不会继承或者私有的属性也不会继承
- 多继承通过逗号写多个基类,但是如果多个类有同一个方法,调用顺序通过自身,第一个基类,第二个基类等按照顺序在第一个方法出现的类中调用通过mro获取元祖顺序
- 多态,通过isinstance(a,b)a是否是B类型的(Python的多态和Java的多态不一样,Python的多态也就是鸭子类型,只要像就可以)
- Python直接类里面方法为定义的属性可以是类共有的属性,通过类名调用,相当于其他的静态属性。
- 类方法,通过类名调用,也可以通过对象调用@classmethod
- 静态方法通过@staticmethod两种方法都可以调用。
__new__创建对象调用,然后init接受new的返回对象new相当于创建对象init方法相当于初始化(单列模式,不考虑参数初始化)
class Test(object): __test = None def __init__(self): print('init') def __new__(cls): print(1) if isinstance(Test.__test,Test): return Test.__test else: Test.__test = object.__new__(cls) return Test.__test a = Test() b = Test() print(a) print(b)
- XX 表示共有属性
- _XX 如果通过import a from * 这种方式,这样是导入不了的
- XX 属性私有 实际上了类名XX_
- XX 类自动调用的方法
- XX_ 使用关键词时可以在后面加一个下划线
异常
- try except else finally
- 手动抛出异常raise
模块
- import 模块名 | as a
- from 模块名 import 功能1,功能2 | *
- from 模块名 import * 在模块中可以使用_all_ = [‘方法名’,’类名等’],来规定引入的可以使用那些方法或变量
- 如果一个文件夹想要成为包可以创建init__.py文件,引入的时候会先执行这个文件,在里面可以通过__all = [] 来设置,通过from 包名 import * 来控制访问
其他
- a = [i|(i,j) for i in range(1,10)]
- 集合set {} 里面不能有重复元素add pop update
- == 判断的值是否相同,is 判断的是地址是否相同
- 浅拷贝是可以是两个变量指向一个内存,并没有重新创建一个内存块
- 深拷贝是重新申请一个内存空间 copy.deepcopy();如果内容里面还有地址引用,还会重新创建内存,如果不想重新创建可以使用copy.copy()
- 判断变量或对象是否可迭代,也就是可循环,通过from collections import Iterator isinstance([],iterator)