1 函数
1.1 字符串格式化方法
Python中字符串格式化输出的几种方法:
字符串格式化另外一种方式format方式
#字符串format()方法#第一种importdatetime
msg = '欢迎光临{name},今天的日期是{today}'msg = msg.format(name = 'zhangsan',today
= datetime.datetime.today())
print(msg)
#第二种sql = 'insert into my_user_value({id},{name},{sex},{addr})'tmp = sql.format(id=11,name='lisi',sex='男',addr='dfdsd')
print(tmp)
#第三种sqla= 'insert into {} value {}'.format('aaa','bbb')
print(sqla)
#format_map 是对字典字符串格式化d = {'name':'小黑','sex':'男'}
words = '名字:{name},性别:{sex}'.format_map(d)
print(words)
Python2的默认字符集编码是ASCII码,如果出现如下错误都是python2中报的:
可以在python2前面添加一个注释-*- coding:utf-8 -*- 即可解决中文报错问题;
python3默认是utf-8(utf-8是unicode编码的子集),添加中文不会报错。
name = '小黑'FILE_NAME = 'goods.json'#变量名如果是大写的表示常量,常量表示变量值一般都不会怎么变化的
1.2
全局变量与局部变量
name = '小黑'FILE_NAME = 'goods.json'#变量名如果是大写的表示常量,常量表示变量值一般都不会怎么变化的#局部变量:在函数里面定义的变量都是局部变量,除了函数之外就不能用了
#全局变量:在文件最上面定义的这个变量就是全局变量defhhh():
name = '小白'print(name)
hhh()
globalname #在函数里如果需要修改全局变量的值,则用global声明一下,一般不建议使用全局变量,因为全局变量一直占用内存
字典和list这种可变变量,不需要用golbal来声明,就可以直接修改了
1.3
可变参数
可变参数(也称为参数组):不是必填的,没有限制参数个数,一般参数比较多的时候可以使用此方法实现;
在参数前面添加一个*号:defsend_mail(*email):
print('email..',email)
send_mail('zhangsan@163.com')
send_mail('zhangsan@163.com','lxy@qq.com','zyf@126.com')
send_mail()
示例:
defrun(name,*args):
print(name)
print('args:',args)
run('zhangsan','22','beijing','天通苑')
将zhangsan传给了name,其他的字符串都传给了args
函数return多个值时,默认放在一个元组中,也可以用多个变量接收return的值defnhy():
name = 'niuhanyang'sex = '男'age= 18
returnname,sex,age
res = nhy() #默认存放在一个元组中
print(res)
a,b,c = nhy() #也可以使用多个变量接收return的值
print(a,b,c)
#位置参数(必填参数),默认值参数(不必填),可变参数(不必填,不限制参数个数)#位置参数defop_db(ip,port,db,user,passwd,sql):
print('连接mysql操作数据库')
passop_db('192.168.1.1',3306,'aaa','root','123456','select')
op_db('192.168.1.1','3306',user='root',passwd='123456',db='jzx',sql='insert')
#关键字参数:在参数前面添加两个**号,不必填,不限制参数个数,传的参数放在了字典里面print('------关键字参数1------')
defmy(**info):
print(info)
my(name='haha',sex='男',age=18)
my()
my(type='car',a=1,c=1)
print('------必填参数+关键字参数2------')
defmy(name,**info):
print(name)
print(info)
my('xiaohei',a='aaaa',b='bbbbb') #两个**号关键字参数必须的指定谁等于谁,不指定会报错print('------多种参数1------')
#如果多种类型的参数一起使用,则必须是按位置参数->默认参数->可变参数->关键字参数的顺序填写。defmy(name,sex='男',*args,**kwargs):
print(name)
print(sex)
print(args)
print(kwargs)
my('xiaohei')
my('xiaohei','hhh','args','args2',k='1',k2='2')
1.4
递归
递归,即函数自己调用自己,递归最多循环999次。用递归的话,必须得有一个明确的结束条件;用递归能实现的也可以使用循环实现。
defmy2():
num = input('输入一个数字:')
num = int(num)
ifnum%2 !=0:
print('请输入偶数')
returnmy2()
my2()
import random
res = random.sample(range(1,34),6)
print(res)
#方法一
for i in range(len(res)):
res[i] = str(res[i]).zfill(2)
print(res)
#方法二:列表推导式,列表生成式
res = [str(i).zfill(2) for i in res]
print(res)
#100里面的偶数
hh = [i for i in range(0,100,2)]
print(hh)
2
内置函数
Python内置函数:
input
int
dict
set
list
str
len
open
tuple
type
max #取最大值
dir #看这个对象里面有哪些方法
msg ='hello'print(dir(msg))
sorted #排序
print(chr(97)) #打印数字对应的ascii
print(ord(‘b’)) #打印字符串对应的ascii
round() #保留几位小数
eval #python执行代码
exec #执行python代码
enumerate #枚举方法
#同时获取下标以及元素的方法:#方法一stus = ['张三','李四','王五']
fori inrange(len(stus)):
print(i,stus[i])
#方法二:enumerate枚举方法:forindex,s inenumerate(stus):
print(index,s)
指定下表从指定的数值开始,不指定默认从0开始:
Zip #压缩
stus = ['张三','李四','王五']
sex = ['男','女','女']
age = [30,20,22,21]
forname,se,ag inzip(stus,sex,age): #zip将多个list压缩到一起print(name,se,ag)
如果list元素不一样多,则循环最少的。
Map #循环帮你调用函数
Filter
3
模块
一个python文件就是一个模块
3.1
标准模块
标准模块:python自带的模块就是标准模块,也就是可以直接import进来的标准模块,如:
import json
import random
import datetime
import time
import os
3.2
第三方模块
第三方模块:别人写好的模块,你安装完之后就能用
3.2.1 pip安装
第三方模块需要自己安装,使用pip源方法进行安装
pip install +第三方模块名
pip install pymysql
如果pip命令不存在的,则直接到python中安装目录(D:\Miniconda3\Scripts)的pip添加到环境变量中去;
如果pip命令有,但是还是不能安装,则用where pip查看下面是否是有多个pip导致的,将非python下的pip重命名即可解决;
如果装了多个版本的python,则下载第三方库的方法为:
python2 –m pip install xxx
python3 –m pip install xxx
3.2.2 手动安装
先从python官方网站(https://pypi.org)上搜索需要安装的模块:
.whl后缀结尾的文件安装方法(使用绝对路径方法进行安装):
pip install
D:\pythonbao\redis-2.10.6-py2.py3-none-any.whl
.tar.gz压缩包的文件安装方法:
先解压文件,进入到解压的文件目录下,在地址栏上输入cmd进入到该路径下(或者在该解压文件夹下按住shift键,右键选择“在此处打开命令行窗口”),在打开的窗口下执行python setup.py install。
Pycharm安装第三方模块的方法(这个不是太好用):
3.3
自己写的模块
自己写的:自己写的python文件
3.4
常用模块
3.4.1 os模块
importos
print(os.getcwd()) #取当前的路径os.mkdir('spz') #在当前目录下创建一个文件夹os.mkdir('d:\\aaa') #在绝对路径下创建文件夹os.makedirs('spz2') #在当前目录下创建一个文件夹,os.makedirs('stu\\laowang') #父目录不存在时,会自动帮忙创建父目录,而mkdir不会;
print(os.listdir('D:\\pythonscript\\day5')) #获取某个路径下的所有文件
# for i in range(10):
#
os.mkdir('D:\\pythonscript\\day5\\test%s'%i)
#把末尾是偶数的文件夹中,创建一个a.txt文件,里面随便写点东西#思路如下:#1、获取到这个目录下所有的文件夹,os.listdir('')
#2、判断文件夹的名字最后一位是不是偶数#3、如果是偶数的,在这个文件里面f = open(a.txt) f.write('xxxx')fordir inos.listdir('D:\\pythonscript\\day5'):
ifdir[-1].isdigit():
ifint(dir[-1])%2==0:
abs_path = r'D:\\pythonscript\\day5\\%s\\a.txt'%dir
withopen(abs_path,'w') asfw:
fw.write('test')
#拼接路径,会自动识别路径分隔符print(os.path.join('day5','test0','a.txt'))
print(os.sep) #显示当前系统文件路径分隔符
print(os.path.dirname('D:\\pythonsript\\day5\\test0\\a.txt')) #获取父目录的路径
os.path.getsize()
#获取文件大小的
3.4.2 time模块
importtime
#时间戳,从unix元年开始到现在过的秒数#格式化号的时间2018-07-01print(time.time()) #获取当前时间戳print(time.strftime('%Y-%m-%d %H:%M:%S')) #获取格式化好的时间print(time.strftime('%y%m%d')) #%Y和%y有点区别#时间戳和格式化时间转换#时间元组print(time.gmtime()) #把时间戳转成时间元组,如果不传时间戳,那么取的是标准时区的时间print(time.localtime()) #取当地时区的时间元组print(time.localtime(1530436244-864000))
print(time.asctime(time.localtime(1530436244-864000)))
print(time.strftime('%Y%m%d%H%M%S',time.localtime(1530436244-864000)))
#时间戳转格式化好的时间#1、先把时间戳转成时间元组#2、再把时间元组转成格式化好的时间deftimestampToStr(timestamp=None,format='%Y%m%d%H%M%S'):
iftimestamp:
time_tuple =
time.localtime(timestamp) #转成时间元组returntime.strftime(format,time_tuple)
returntime.strftime(format)
res = timestampToStr(1530436244,'%Y%m%d')
res2 = timestampToStr()
print(res,res2)
#格式化好的时间转时间戳#1、先把格式化好的时间转成时间元组#2、再把时间元组转化成时间戳time1 = time.strptime('20180701','%Y%m%d')
print(time.mktime(time1))
defstrToTimestamp(format_time=None,format='%Y%m%d%H%M%S'):
ifformat_time:
time_tuple =
time.strptime(format_time,format)
returnint(time.mktime(time_tuple))
returnint(time.time())
t1 = strToTimestamp('20180702020202')
t2 = strToTimestamp()
print(t1,t2)