python基础
基本语法
#!/usr/bin/python3
# -*- coding:UTF-8 -*-
#coding=utf-8
python注释:#注释单行,```、"""多行注释
标识符
- 第一个字符必须是字母表中的字母或下划线(不能以数字开头)
- 标识符中的其他部分由字母、数字和下划线组成
- 标识符对大小写敏感
推荐驼峰命令法
保留关键字
import keyword
keyword.kwlist
['False','None','True','and','as','assert','async','await','break','class','continue','def',
'del','elif','else','except','finally','for','from','global','if','import','in','is',
'lambda','nonlocal','not','or','pass','raise','return','try','while','with','yield']
行和缩进
默认python以换行符为分隔符,如果要将多条python代码放入一行执行使用分号分割即可
import keyword;keyword.kwlist
import requests;print(requests.get(url='https://baidu.com').text)
多行语句执行
total=item_one+\
item_two+\
item_three
格式化输出
#!/usr/bin/python3
#coding='utf-8'
while True:
data = input('please input\n')
if data =='q' or data == 'exit':
exit()
print('this is demo:%s' % data)
列表
arr1 = [0,1,2,3,4,5]
增加元素
list.append('a') #每次添加一个元素
删除元素
del('a') #删除元素
字典
对于字典的键有两个限制:
- 字典中的键必须独一无二,即在同一个字典中,任何两个键-值对都不能相同;
- 键必须是不可变的。因此,字典键不能是列表、字典
值没有这两个限制
取元素的值
dict1={'key1':[1,2,3,4,5,6],'key2':{'key22':'1234abcd'}}
print(dict1['key1'])
添加/修改元素
dict1['key1']='xxx'
删除元素
del list('key1')
del dict1['key1']
元组
元组是一种不可变序列,即创建之后不能再做任何修改
tuple=(1,2,3,4,5,6)
访问通过与列表中的访问方法相同
集合
集合是无序可变序列,使用一对大括号0(这一点和字典比较类似)作为界定符,元素之间使用逗号分隔,同一个集合内的每个元素都是唯一的,元素之间不允许重复
可以使用集合来对列表去重
集合的创建
s1=set() #创建空集合
s1=set("abcde")
添加集合元素
s.add(x)
s.update(x)
其中参数可以是列表,元组,字典等
移除集合元素
s.remove(x) #将元素x从集合s中移除,如果元素不存在,则会发生错误
s.discard(x) #如果元素不存在,不会发生错误
s.pop() #随机删除集合中的一个元素
集合的运算
减法:a-b(a中减去与b中相同的元素)
或运算:a|b(a与b中的元素相加去重(保留一个))
与运算:a&b(取a与b中相同的元素)
异或运算:a^b(a与b相加去除相同部分)
条件控制语句
if xxx: 条件
print(xx)
elif xxx: 条件
print(xx)
else:
print(xx)
循环语句
for
list1 = [1,2,3,4,5,6]
for i in list1:
print(i)
for i in range(1,10):
print('%d'%i)
while
i=1
while i<10:
print('%d'%i)
i++
函数
函数的分类:自定义函数和Python内置函数
自定义函数
def demo():
print('hello word')
demo()
def language():
print(('{1) is the {0} {2}!!!'). format('best', 'python',' language'))
language()
有返回值的函数
def demo():
return 'demo';
print(demo())
定义有参数的函数
def demo(lang):
return 'demo'.lang;
print(demo('test'))
类
python使用class关键字+类名(大驼峰命名法)创建类,类中的函数称之为方法,类中的变量称之为属性。
定义类和方法
实例方法最大的特点就是,它最少也要包含一个 self 参数,用于绑定调用此方法的实例对象(Python 会自动完成绑定)
class Person:
def say(self,name):
print('hello ',name)
people = Person()
people.say('lyh')
调用类内部方法和属性
class MyCLass:
a='xiaohong'
b='xiaoqiao'
def say_aname(self):
print(self.a)
def say_bname(self):
print(self.b)
def say_name(self):
self.say_aname()
self.say_bname()
tname = MyClass()
tname.say_bname()
文件操作
- 通过open函数打开文件返回文件对象
demo = open('demo.txt',encoding='utf-8') #有中文需要标明utf-8
open不指定打开模式默认为read模式打开
通过文件对象的访问操作文件
read:一次性全部读取完,且将文件的内容读取为一个字符串
readline:逐行读取,文件的每一行就是一个字符串
readlines:默认全部读取完,返回每行组成一个数组
write:写文件
filename ='1.txt'
filel=open(filename,'w',encoding='utf-8')
file1.write('Hello lyh!!!')
file1.writelines('Hello lyh22!!!') #写入多行
file1.flush()
filel.close()filenamel ='/etc/passwd'
filename2 ='1.txt'
file1 = open(filenamel,'r',encoding='utf-8')
file2 = open(filename2,'w',encoding='utf-8')
filellist=file1.readlines() #读取多行,返回数组
for i in filellist:
file2.writelines(i) #写入多行
file2.flush()
file2.close()
file1.close()
通过文件close关闭文件
file1 = open(filenamel,'r',encoding='utf-8')
file1.close()with语句自动关闭文件
with open('filename.txt','r',encoding='utf-8') as file1:
demo = file1.read()
print(demo)try finally关闭文件
filename1='/etc/passwd'
filename2='1.txt'
try:
file1=open(filename1)
content=file1.read()
print(content)
finally:
file1.close()
正则表达式
正则表达式主要使用re模块,re模块是python自带模块,不需要使用pip安装,直接import导入即可使用
re.match函数
re.match 尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match()就返回none
re.match(pattern,string,flags=0)
re.match(正则表达式,需要匹配的字符串,标志位(修饰符))
匹配成功re.match方法返回一个匹配的对象,否则返回None
使用与re.search相同
re.search函数
demo:
#!/usr/bin/python3
import re
line="Cats Are smarter than dogs"
searchobj=re.search(r'(.*) are (.*?) .*', line,re.M|re.I)
if searchobj:
print("searchobj.group():",searchobj.group()) #匹配到的整个结果
print("searchobj.group(1):",searchobj.group(1))#第一个子表达式的内容
print("searchobj.group(2):",searchobj.group(2))
else:
print("Nothing found!!")
demo说明:
. -> 匹配除换行符以外的任意单个字符。
* -> 匹配前面表达式0次或多次,匹配前面表达式多次。
? -> 表示正则表达式的非贪婪模式,默认.*会尽可能的匹配更多的数据,若加了?则会在表达式内匹配尽可能少的数据返回
.* -> 匹配多个除换行符外的任意字符
*? -> 匹配多个除换行符外的任意字符的非贪婪模式,尽可能在正则中匹配更少的数据。
() -> 表示匹配括号内的表达式,也表示一个组
re.M -> 多行匹配,影响^和$(^表示正则表达式的开始位置,$表示正则表达式的结束位置)
re.l -> 使匹配对大小写不敏感
re.match与re.search的区别
re.match只匹配字符串的开始,如果字符串开始不符合正则表达式,则匹配失败,函数返回None,而re.search匹配整个字符串,直到找到一个匹配
re.sub函数
Python的re模块提供了re.sub用于替换字符串中的匹配项
#!/usr/bin/python3
import re
phone = "2004-959-559 # 这是一个电话号码” #定义字符串
#删除注释
num = re. sub(r'#."s', "", phone)#利用#. $正则表达式匹配#开始的任意非换行符字符串,替换为空
#移除非数字的内容
num=re.sub(r'\D',"",phone)
print("电话号码:",num)
num=re.sub(r'\D',"",phone) #\D匹配任意非数字字符串,除了数字都可以匹配到
字符类
特殊字符类
re.conpile函数
compile函数用于编译正则表达式,生成一个正则表达式(Pattern)对象,供match()和search()这两个函数使用
import re
str = 'helloworld'
pattern = re.compile(r'hello.*')
tstr = pattern.match(str)
print(tstr.group())
re.findall函数
在字符串中找到正则表达式所匹配的所有子串,并返回一个列表,如果有多个匹配模式,则返回元组列表,如果没有找到匹配的,则返回空列表
import re
str='LYHsafe666LYHsafe222'
tstr = re.findall(r'\d+',str)
print(tstr) #['666','222']
模块
import导入方式和调用
导入:import module
导入整个模块
调用:module.func()
使用相关功能时使用module.的形式
导入:import module as xxx
导入模块并赋予别名
调用:别名.func()
用相关功能时使用别名的形式
from导入方式和调用
导入:from module import *
从模块中导入所有功能(不建议使用)
调用:func()
使用时直接用功能名I
导入:from module import xxx as yyy
从模块中导入某个功能并取别名
调用:yyy
使用时使用别名即可
导入:from module import XXX
从模块中导入某个功能
调用:xxx
使用时直接用功能名称即可
注意:
- 模块名一定不要与python的内置模块重名,避免发生冲突
- 如果导入的两个模块存在同名的函数,那么后导入模块的函数会覆盖掉先导入的函数
模块测试接口
if __name__ == "__main__":
main()
#如果当前文件是自运行时_name_==_main_,如果是以模块形式导入到别的文件时,_name_==模块名称
#if _name_=="_main_":当该文件是自运行时运行main函数,当被模块导入不自动运行mian函数,运行的话需要导入后调用
这行代码是用来方便用户测试自己写的脚本的功能。这句话通过判断name变量的值来判断模块是被导入还是自己执行(导入不等于__main__)
模块被导入时,模块内直接执行的代码会在导入时执行一次(因此建议将模块测试的代码写在上述语句块中(指定入口名))