python的基本语法记录
最近在学习爬虫,爬虫最多是用python编写,这里总结记录下本人整理的python基本语法
一.python简介
Python是一种跨平台的计算机程序设计语言。 是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。
二.基础语法
2.1单行注释
2.2多行注释
2.3乱码问题
当Python解释器读取源代码时,为了让它按UTF-8编码读取,我们通常在文件开头写上这两行:
# -*- coding:utf-8 -*- # coding=utf-8 |
2.4数据类型转换
函数 |
说明 |
int(x [,base ]) |
将x转换为一个整数 |
long(x [,base ]) |
将x转换为一个长整数 |
float(x ) |
将x转换到一个浮点数 |
complex(real [,imag ]) |
创建一个复数 |
str(x ) |
将对象 x 转换为字符串 |
repr(x ) |
将对象 x 转换为表达式字符串 |
eval(str ) |
用来计算在字符串中的有效Python表达式,并返回一个对象 |
tuple(s ) |
将序列 s 转换为一个元组 |
list(s ) |
将序列 s 转换为一个列表 |
chr(x ) |
将一个整数转换为一个字符 |
unichr(x ) |
将一个整数转换为Unicode字符 |
ord(x ) |
将一个字符转换为它的整数值 |
hex(x ) |
将一个整数转换为一个十六进制字符串 |
oct(x ) |
将一个整数转换为一个八进制字符串 |
2.5普通输出
print('hello world')
print('100 + 200 =', 100 + 200) |
2.6格式化输出
print('%d+%d=%d'%(1,2,3)) |
%d 整数
%f 浮点数
%s 字符串
%x 十六进制整数
三.判断与循环
3.1 if
if 条件: pass elif 条件: pass else: pass |
3.2 while
while 条件: 循环体 |
3.3 for
for i in range(1,10): 循环体 |
四.集合类型
4.1字符串
4.1.1 find查找位置
mystr="abcdefg" print(mystr.find("e", 0,len(mystr))) 结果4 |
4.1.2 count查找次数
mystr="abecdefg" print(mystr.count("e", 0,len(mystr))) 结果2 |
4.1.3 replace替换
mystr="abcdef" print(mystr.replace("e", "f")) 结果abcdff |
4.1.4 split分割
mystr="a,b,c,d,e" print(mystr.split(",")) 结果['a', 'b', 'c', 'd', 'e'] |
4.1.5 lower全小写
mystr="AbCdef" print(mystr.lower()) 结果abcdef |
4.1.6 upper全大写
4.1.7 strip 删除两边的空白字符
mystr=" AbCdef " print(mystr.strip()) |
4.1.8 isalpha 全字母吗
mystr="AbCdef" print(mystr.isalpha()) 结果True |
4.1.8 isdigit 全数字吗
4.1.9 isalnum 全字母或数字吗
4.2列表 []
4.2.1添加元素
a = [1, 2] b = [3, 4] a.append(b) print(a)
a = [1, 2] b = [3, 4] a.extend(b) print(a)
a = [0, 1, 2] a.insert(1, 3) print(a) 结果 [1, 2, [3, 4]] [1, 2, 3, 4] [0, 3, 1, 2]
|
4.2.2查询元素
a = ['a', 'b', 'c', 'a', 'b'] print(a.count('b')) print(a.count('d')) 结果 2 0 |
4.2.3排序
a = [1, 4, 2, 3] a.sort() print(a) a.reverse() print(a) 结果 [1, 2, 3, 4] [4, 3, 2, 1] |
4.3元组 ()
元组与列表类似,不同之处在于元组的元素不能修改。元组使用小括号,列表使用方括号。
4.4字典 {}
4.4.1添加字典
info = {'name':'班长', 'sex':'f', 'address':'地球亚洲中国北京'} info["id"]="数据" print(info) 结果:{'name': '班长', 'sex': 'f', 'address': '地球亚洲中国北京', 'id': '数据'} |
4.4.2遍历字典
info = {'name':'班长', 'sex':'f', 'address':'地球亚洲中国北京'} for key,value in info.items(): print("%s,%s"%(key,value)) |
五.函数
5.1函数格式举例
def fun(a, b, *args, **kwargs): print("a =", a) print("b =", b ) print("args =", args ) print("kwargs: ") for key, value in kwargs.items(): print( key, "=", value )
fun(1, 2, 3, 4, 5, m=6, n=7, p=8)结果: a = 1 b = 2 args = (3, 4, 5) kwargs: m = 6 n = 7 p = 8
|
5.2递归函数举例
# 递归显示 [1, 1, 2, 3, 5, 8, 13, 21, 34, 55] aa = 1 str = []
def aaa(b): if b < 2: return 1 else: return aaa(b - 1) + aaa(b - 2)
for i in range(0, 10): str.append(aaa(i))
print(str) |
5.3匿名函数举例
sum = lambda a,b,c:a+b+c print(sum(1,2,3)) 结果 3 |
字典排序
lit=[{"name":"zhangsan","age":18},{"name":"lisi","age":16},{"name":"wangwu","age":17}] lit.sort(key=lambda x:x["age"], reverse=False) print(lit) |
六.文件操作
6.1打开、关闭与写入
f = open(r'G:\aasst.txt', 'a+') #打开 f.write('hello world, i am here!') #写入 f.seek(0,0) #指针重回第一位 print(f.read()) #读取 f.close()#关闭 |
访问模式 |
说明 |
r |
以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。 |
w |
打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。 |
a |
打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。 |
r+ |
打开一个文件用于读写。文件指针将会放在文件的开头。 |
w+ |
打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。 |
a+ |
打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。 |
七.类与对象
7.1定义类
定义一个类,格式如下:
class 类名: 方法列表
创建对象的格式为:
对象名 = 类名()
可以把self当做C++中类里面的this指针一样理解,就是对象自身的意思
class Class1:#创建一个类 def show1(self): print("show1")
class1=Class1() #创建对象 class1.show1() |
7.2保护对象的属性
属性名前面加了2个下划线'__',则表明该属性是私有属性,否则为公有属性
下面举例如何调用__,简单说是内部建立公有属性调用__
class Car(object): def __inte(self,name): self.__name=name def getInit(self): print("%s"%(self.__name)) def setInit(self,name): self.__inte(name);
car1=Car() car1.setInit("张三") car1.getInit() |
7.3 __init__()方法
创建对象时,首先调用__init__()方法
7.4 继承/多继承
在定义类时,小括号()中为父类的名字
class Car1(object): def show(self): print("show1") class Dog1(Car1): pass
dog1=Car1() dog1.show() |
7.5类属性和实例属性
类属性就是类对象所拥有的属性
class Car2(object): name="张三"
car2=Car2() car2.name="李四" print(Car2.name) #类属性 print(car2.name) #实例属性 结果: 张三 李四 |
7.6类方法和静态方法
类方法是类对象所拥有的方法,需要用修饰器@classmethod来标识其为类方
静态方法需要通过修饰器@staticmethod来进行修饰法
class Car3(object): @classmethod def show(self): print("show") car3=Car3() car3.show()#调用方式一 Car3.show()#调用方式二
class Car4(object): @staticmethod def show(self): print("show") car3=Car3() car3.show()#调用方式一 Car3.show()#调用方式二 |
八.设计模式
8.1单例设计模式
举例一
class Car2: pass class Car: __car =Car2() @classmethod def getInstance(self): return self.__car
a=Car.getInstance() b=Car.getInstance() print(id(a)) print(id(b)) |
举例二
class Sing: __instance=None def __new__(cls): if not cls.__instance: __instance=object.__new__(cls) return cls.__instance
a=Sing() b=Sing() print(id(a)) print(id(b))
|
8.2工厂设计模式
class Person: def work(self,type): cut= Factory.option(type) cut.cutTree()
class Stone(object): def cutTree(self): print("使用石头砍树")
class Water(object): def cutTree(self): print("使用水砍树")
class Aex(object): def cutTree(self): print("使用斧头砍树")
class Factory: @classmethod def option(self,type): if type=="aex": return Aex(); elif type=="water": return Water(); elif type=="stone": return Stone(); else: print("选择斧头") return
person=Person() person.work("aex") |
九.异常
9.1异常格式
try: i=1/0 except Exception as e: print(e) |
10.模块
10.1引入模块
使用from…import 或 import
from os import path import os print(path.getsize("test.txt")) |
10.2安装模块
pip install 模块
11.列表推导式
a = [i for i in range(1,10)] print(a) 结果: [1, 2, 3, 4, 5, 6, 7, 8, 9] |
下载相关