day5

# 函数
# 局部变量与全局变量:
局部变量:在函数里面定义的变量都是局部变量,出了函数之后就不能用了;
全局变量:在函数外定义的变量;
 
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())  #返回当前时间戳
原文地址:https://www.cnblogs.com/you-shu/p/9274386.html