# 函数
# 局部变量与全局变量:
局部变量:在函数里面定义的变量都是局部变量,出了函数之后就不能用了;
全局变量:在函数外定义的变量;
FILE_NAME='goods.json' #常量,通常使用大写变量名表示(本质还是变量)
# 在函数内部改变函数外的变量值
1.不可变变量,需要用global声明下
name='小黑' #全局变量
def hhh():
global name #修改全局变量name的值
name='小白'
print(name)
hhh()
print(name)
# 2.可变变量,不需要声明,就可以直接改,如list,字典
d={'name':'abc'}
def my():
d['name']=29
print(d)
my()
print(d)
# 函数的形参类型-可变参数,参数值
def send_mail(*args):
print(args)
print('email...',args)
send_mail('niuhanyang@16.com') #可变参数在函数调用时会把传过来的参数放入一个tuple里
send_mail('niuhanyang@163.com','lxy@qq.com','zyf@126.com')
def run(name,age=29,*args): #可变参数要放在位置参数和默认参数的后面,非必填,不限制参数个数
print(name)
print(age)
print(args)
run('lus',33,'北京','天通苑')
# return的用法:
1.函数没有return,返回的是None
def nhy():
name='牛寒阳'
age=18
sex='男'
print(nhy()) #返回一个None
# 2.返回函数的返回值;终止程序,return后面的语句不会被执行
def nhy():
name='牛寒阳'
age=18
sex='男'
return name,age,sex
a,b,c=nhy() #返回值用a,b,c来接收
print(a,b,c)
# 函数的形参类型-关键字参数
def my(name,sex='男',*args,**kwargs): #关键字参数要放在位置参数/默认参数/可变参数的后面,非必填,不限制参数个数
print(name)
print(sex)
print(args)
print(kwargs)
my('xhei')
my('xhei','hhh','args1','args2',k='1',k2='v2') #关键字参数在函数调用时会把传过来的参数放入一个字典里
my(name='hah',sex='男',age=18)
# 递归-函数自己调用自己
count=0
def add():
global count
count+=1
print('hhh',count)
add() #递归
add() #最多循环999次,以防止递归外溢
#用递归的话必须有一个明确的结束条件
def my():
num=input('输入一个数字:')
num=int(num)
if num%2 != 0:
print('请输入偶数')
return my()
my()
# 列表推导式,列表生成式
1.形式:[表达式 for 变量 in 列表] 或者 [表达式 for 变量 in 列表 if 条件]
import random
res=[1,5,78,36,66,18]
# 展开写法1:
for i in range(len(res)):
res[i]=str(res[i]).zfill(2)
print(res[i])
# 展开写法2:
for i in res:
i=str(i).zfill(2)
print(i)
# 写法3:列表推导式写法
i=[str(i).zfill(2) for i in res]
print(i)
#1000偶数
num=[ i for i in range(0,1000,2)] #列表推导式
print(num)
# 内置函数
print(max(range(1,28))) #max,返回最大值
print(min(range(1,28))) #min,返回最小值
print(sum(range(1,28))) #sum,求和
msg='hello'
print(dir(msg)) #看这个对象里面有哪些方法
res=sorted([6,4,3,2,2,8,0]) #返回按升序排序的列表
print(res)
res=sorted([6,4,3,2,2,8,0],reverse=True) #返回按降序排序的列表
print(res)
eval():执行python代码,只能执行简单的python代码
1.实现list、dict、tuple与str之间的转化
res=eval('[1,2,3,4,5]') #把字符串转成list
print(res)
2.计算指定表达式的值,只能计算单个表达式
res=eval('2+2')
print(res)
exec():执行python代码的
code.txt文件内容如下:
def my():
print('我是exec执行的代码‘)
return 123
f=open('code.txt')
code=f.read()
exec(code)
my()
print(chr(97)) #打印数字对于的ascii码
print(ord('b')) #打印字符串对应的ascii码
# enumerate()-枚举:
stus = ['雷振华','胡婷','商洁','涛涛'] #取值时将名字和下标同时打印出来
方法一:
for i in range(len(stus)):
print(i,stus[i])
方法二:
for index,s in enumerate(stus):
print(index,s)
msgs = [ '登录','注册','退出' ]
for index,msg in enumerate(msgs,1): #默认下标从0开始,msgs后面加1表示下标从1开始
print(index,msg)
print('请输入你的选择:')
# zip():
stus = ['雷振华','胡婷','商洁','涛涛']
sex = ['男','女','女','男']
age = [1,2]
for name,se,ag in zip(stus,sex,age): #将多个list压缩到一起
print(name,se,ag)
# 常用的模块
import os
print(os.getcwd()) #取当前的路径
os.mkdir('hu1') #创建文件夹
os.mkdir('e:\spz1') #在指定路径创建文件夹,父目录不存在时会报错
os.makedirs('e:\spz3') #创建文件夹
os.makedirs('e:\sp4\spz5') #父目录不存在的时候会帮你创建父目录
print(os.listdir(r'e:sp4spz5')) #获取某个目录的所有文件
for i in range(5):
os.mkdir(r'e:ht123 est%s'%i) #创建多个文件夹
os.rmdir('e:\spz3') #删除空文件夹
# 练习:把末尾是偶数的文件夹中,创建一个a.txt文件,里面随便写点东西
1、获取到这个目录下所有的文件夹, os.listdir('')
2、判断文件夹的名字最后一位是不是偶数
3、如果是偶数的,在这个文件里 f = open(a.txt) f.write('xxx')
for dir in os.listdir(r'e:\ht123'):
if int(dir[-1]) %2==0:
abs_path=r'e:\ht123\%s\a.txt'%dir #拼接文件路径
with open(abs_path,'w') as fw:
fw.write('test')
print(os.path.join('ht123','test0','a.txt')) #拼接路径,它会自动识别路径分隔符
print(os.sep) #获取当前系统的路径分隔符
print(os.path.dirname(r'e:\ht123 est0')) #获取父目录的路径
print(os.path.getsize(r'e:\ht123\test0')) #获取文件大小
print(os.path.exists(r'e:\ht123\test0')) #判断文件,文件夹是否存在
print(os.path.isdir(r'e:\ht123')) #判断是否是文件夹,如果文件夹不存在的话,会返回False
print(os.path.isfile(r'e:\ht123\test0\a.txt')) #判断是否是文件,如果文件不存在的话,会返回False
print(os.path.split('e:\ht123\test0\a.txt')) #分割文件名和路径的
for path,dir,file in os.walk('e:\ht123'): #os.walk()目录遍历
print('path..',path,'dir..',dir,'file..',file)
# 练习
import os
for cur,dirs,files in os.walk('logs'):
print(cur,dirs,files)
for f in files:
old_file_name=os.path.join(cur,f) #拼接旧文件路径
new_file_name=os.path.join(cur,f+'.bak') #拼接新的文件路径
os.rename(old_file_naem,new_file_name) #重命名
时间戳:从unix元年开始到现在过的秒数
# 格式化好的时间:2018-07-01
#时间元组
import time
print(time.time()) #获取当前时间戳
print(int(time.time())) #获取当前时间戳,取整
print(time.strftime('%Y%m%d%H%M%S')) #返回格式化好的当前时间
print(time.gmtime()) #把时间戳转成时间元组,如果不传时间戳,那么取的是标准时区的时间
print(time.localtime()) #把时间戳转成时间元组,如果不传时间戳,那么取的是当地时区的时间
print(time.localtime(1530436245))#把时间戳转成时间元组
print(time.strftime('%Y%m%d%H%M%S',time.localtime(1530436245))) #把时间元组转换成格式化好的时间
# 练习一:将时间戳转格式化好的时间
1.首先要把时间戳转成时间元组
2.再把时间元组转成格式化好的时间
def timestamptostr(timestmap=None,format='%Y-%m-%d %H:%M:%S'):
if timestmap:
time_tuple=time.localtime(timestmap)#时间戳转成时间元组
return time.strftime(format,time_tuple) #把时间元组转成格式化好的时间
return time.strftime(format) #返回格式化好的当前时间
#练习二:格式化好的时间,转时间戳
1、首先要把格式化好的时间 转成时间元组
2、再把时间元组转成时间戳
def strtotimestamp(format_time=None,format='%Y-%m-%d %H:%M:%S')
if format_time:
time_tuple=time.strptime(format_time,format) #把格式化好的时间,转成时间元组
return int(time.mktime(time_tuple)) #把时间元组转成时间戳
return int(time.time()) #返回当前时间戳