学习总结——python的基础4(函数、模块)

Posted on 2018-07-04 13:11  米斯特·王  阅读(194)  评论(0)    收藏  举报

函数


name = '小黑'
FILE_NAME ='goods.json' # 常量

# 局部变量
    # 在函数里面定义的变量都是局部变量,除了函数之后就不能用了
#全局变量
    # 在文件最上面定义的这个变量,就是全局变量
def test():
    # global name # 想在函数中对全局变量进行修改,就用global声明一下
    name = '小白'
    print(name)
# test()
# print(name)
d = {'name':'abc'}  # 字典和list,这种可变变量,不需要用global来声明,就可以直接改了
def my():
    d['sex']=29
    print()

# my()
# print(d)
# 可变参数,参数组
def send_mail(*args):
    print(args)
    print('email..',args)
    # print('给xxx发邮件了%s'%email)

# send_mail('abc@163.com')
# send_mail('abc@163.com','def@163.com','ghi@163.com')
# send_mail()

def run(name,age,*args):
    print(name)
    print(age)
    print('args..',args)
# run('Lcs',28,'beijing','天通苑')
# 1、是否必填
# 2、有没有限制参数个数

################################################################################

def abc():
    name = '小黑'
    sex = ''
    age = 18
    return name,sex,age

# print(abc()) # return多个值,会把值放在一个元组里
# a,b,c = abc()
# print(a,b,c)
################################################################################

def op_db(ip,port,db,user,passwd,sql):
    print('链接mysql操作数据库')
    pass

# 三种传参方式:
# op_db('192.168.1.1','xxx','3306','sdf','sdf','sdf')   # 按照位置
# op_db(db='jxz',ip='192.168.1.1',passwd='123456',user='abc',port='3306',sql='select * from users') # 按照关键字
# op_db('192.168.1.1','3306',db='jxz',passwd='123456',user='abc',sql='select * from users') # 位置方式必须在关键字方式前面
################################################################################

# 位置参数(必填参数),默认值参数(不必填),可变参数(不必填的,不限制参数个数)
# 关键字参数
#--------------------------------------#

def my(name,sex='',*args,**kwargs):
    print(name)
    print(sex)
    print(args)
    print(kwargs)

my(name = '小黑',sex = '',age = 18)
# my()
# my(type = 'car',a = 1, c =1)
#--------------------------------------#

# 1、是否必填        # 非必填
# 2、有没有限制参数个数       # 不限制
# 3、**把传过来的参数放到了什么里面        # 字典
#--------------------------------------#

# def my(name,**kwargs):
#     print(name)
#     print(kwargs)

# my('小黑',a='aaa',b='bbb')

#--------------------------------------#

# def my(name,sex='男',*args,**kwargs):
#     print(name)
#     print(sex)
#     print(args)
#     print(kwargs)
#
# my('小黑','男','args1','args2',k1='v1',k2='v2')
#★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★

# 递归,函数自己调用自己
count = 0
def add():
    global count
    count+=1
    print('hhh',count)
    add()
# add()
# 递归的话,最多循环999次
################################################################################

def my2():
    num = input('输入一个数字:')
    num = int(num)
    if num%2 !=0:
        print('请输入偶数')
        return my2()
# my2()
# 1、用递归的话,必须得有一个明确的结束条件

################################################################################

# 举个例子
# 把[20, 19, 10, 6, 15, 17] 改成:
#['20', '19', '10', '06', '15', '17']

# 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 = [20, 19, 10, 6, 15, 17]
print('res:%s'%res)
res1 = [str(i).zfill(2) for i in res]
print('res1:%s'%res1)
res2 = [ i+10 for i in res]
print('res2:%s'%res2)

# 1000 以内的所有偶数
hh = [ i for i in range(2,1000,2)]
print('1000以内的偶数:%s'%hh)


内置函数


# 查看内置方法有哪些

# msg = 'hello'
# print(dir(msg))

# import json
# print(dir(json))
# 字符串/list排序
print(sorted('4564231315'))  # 升序
print(sorted([2,5,6,1,2,3,5],reverse=True))  # 降序
print(round(6.6666666,2))   # 保留两位小数
# eval()  # 执行python代码,只能执行简单的python代码。1+1  a=1
res = eval('3*5')
print(res)
# f = open('goods')
# goods = f.read()
# res = eval(goods)
print(type(res))
# exec()  #

f = open('code',encoding='utf-8')
code = f.read()
exec(code)  # 执行python代码的
my()
stus = ['小黑','小白','小黄','小红']

for i in range(len(stus)):
    print(i,stus[i])

# enumerate  --- 枚举,只要可以循环的都可以用(list、字符串、字典....)
for index,s in enumerate(stus):
    print(index,s)
msgs = ['登录','注册','退出']
for index,msg in enumerate(msgs,1): # enumerate(XXX,1) 这里1表示从1开始
    print(index,msg)
print('请输入你的选择:')
name = ['小黑','小白','小黄','小红']
sex = ['','','','']
age = [15,17,16,18]

for name,sex,age in zip(name,sex,age):  # 把多个list压缩到一起
    print(name,sex,age)
# 如果list中元素个数不一致,循环执行次数按照元素个数最少的那个


常用模块


import os
print(os.getcwd())  # 取当前的路径
os.mkdir('spz') # 创建文件夹
os.mkdir('f:\\wj')
os.makedirs('spz2') # 创建文件夹
os.makedirs('stu\\wj')  # 父目录不存在时,会帮你创建父目录

print(os.listdir('f:\\'))   # 查看目录下有哪些文件

for i in range(10):
    os.mkdir('f:\\wj\\test%s'%i)

os.rmdir('spz') # 删除空文件夹
print(os.remove("test"))#删除文件
# 把末尾是偶数的文件夹中,创建一个a.txt文件,里面随便写点东西
    # 1、获取到这个目录下所有的文件夹。os.listdir('')
    # 2、判断文件夹的名字最后一位是不是偶数
    # 3、如果是偶数,在这个文件里 f = open(a.txt)    f.write('xxx')

for dir in os.listdir(r'f:\\wj'):
    if int(dir[-1])%2==0:
        abs_path = r'f:\\wj\\%s\\a.txt'%dir
        with open(abs_path,'w') as fw:
            fw.write('test')
print(os.path.join('wj','test0','a.txt'))   # 拼接路径,它会自动识别路径分隔符
print(os.sep)   # 当前系统的路径分隔符
print(os.path.dirname(r'f:\\wj\\test0\\a.txt'))    # 获取父目录的路径
print(os.path.getsize(r'f:\\wj\\test0\\a.txt'))    # 获取文件大小
print(os.path.exists(r'f:\\wj\\test0\\a.txt'))   # 判断文件、文件夹是否存在
print(os.path.isdir(r'e:\\wj\\test0\\a.txt'))    # 判断是否是文件夹,如果不存在,会返回False
print(os.path.isfile(r'e:\\wj\\test0\\a.txt'))    # 判断是否是文件,如果不存在,会返回False
print(os.path.split(r'f:\\wj\\test0\\android_2018-06-23.log'))    # 分割文件名和路径


时间相关的模块


import time

# 时间戳 从unix元年开始到现在过的秒数
# 格式化好的时间 2018-07-01
# 时间元组

print(int(time.time())) # 获取当前时间戳
print(time.strftime('%Y-%m-%d %H:%M:%S'))
print(24*60*60*3)   # 3天的总秒数
print(time.gmtime())    # 把时间戳转成时间元组,如果不转时间戳,那么取的是标准时区的时间
print(time.localtime())    # 把时间戳转成时间元组,如果不转时间戳,那么取的是当前时区的时间
print(time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(1530436293 - 259200)))   # 1530436293 - 259200  三天前的时间戳
# 1、时间戳转格式化好的时间
    # 1、首先要把时间戳转换成时间元组
    # 2、再把时间元组转换成格式化好的时间

def timestampToStr(timestamp=None,format='%Y-%m-%d %H:%M:%S'):
    if timestamp:
        time_tuple = time.localtime(timestamp)  # 转成时间元组
        return time.strftime(format,time_tuple)
    return time.strftime(format)

res = timestampToStr(2210065421)
# res = timestampToStr(22456465421,'%Y%m%d')
print(res)
################################################################################

# 1、格式化好的时间转成时间戳
    # 1、首先要把格式化好的时间转换成时间元组
    # 2、再把时间元组转换成时间戳

def strToTimestamp(format_time,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())

res = strToTimestamp('2019-02-21 18:06:45')
print(res)