学习记录004-函数/time and os模块

【参数类型】

1 位置参数:

# 1 位置参数
# def hello(name):  #里面有必填参数
#     if name == "郭等等":
#         print("hello")
#     else:
#         print("你输入错误")
# hello("郭等等")

2 默认值参数:如果形参里面的参数给定值,后期实参里面如果没有值就使用默认值

# 2 默认值参数:如果在形参里面给定参数的默认值,后期实参没有给定值的时候就使用默认参数
# def hello(name="郭等等"):  #里面有必填参数
#     if name == "郭等等":
#         print("hello")
#     else:
#         print("你输入错误")
# hello()

3 可变参数/参数组:*args

# *args---args这个名字是一个变量名,自己命名即可
# 001 不是必填参数
# 002 不限制参数的个数
# 003 传入多个参数的时候把参数放入一个元组里面
# 004 *args可以当作可容纳多个变量组成的元组
def send_report(*args):
    print("发邮件")
    print(args)

send_report()
send_report("guo")
send_report(3,4)

4 可变参数/参数组:*kwargsargs

# 001 不是必填参数
# 002 不限制参数的个数
# 003 传入多个参数的时候会把参数放到一个字典里面 输出即字典
# 004 放入参数的时候需要以key,value的格式进行传入
# 005 kwargsargs是自己命名的名称
def send_report(**kwargsargs):
    print("发邮件")
    print(kwargsargs)


send_report(name = "guo")
send_report(name = "han")
send_report( 1 )   #这个是错误的,因为不是以key value的格式进行传入的
send_report(nuo = 1)

5 关键字参数:关键字参数后面不可以使用位置参数!!!!

# 001 关键字参数后面不能用位置参数,不然会报错
# 002 位置参数后面可以加关键字参数,但需要注意对应关系
def send_report(name,qq):
    print(name,qq)

send_report(qq="123",name="guo")
send_report(name="guo",123)   #这是错误的:位置参数后面加了关键字参数

【关于解包】

需要注意:

1 最后传入参数的地方的*是在调用的时候使用的

2 传入的实参的数量要与定义的参数数量一致

def connect(ip,port,username,passwd):
    print(ip)
    print(port)
    print(username)
    print(passwd)
info = ("192.168.11.110",3318,"guo","123")  #这是一个元组
connect(*info)


li = ['abc','bcd','123',456]  #这是一个列表
connect(*li)

se = {1,2,3,4}  #这是一个集合
connect(*se)

s = '1234'  #这是一个字符串
connect(*s)


dic = {'port':3307,'ip':'127.0.0.1','username':'root','passwd':'1233'}  #这是一个字典,输出为字典的key
connect(*dic)   #输出为字典的key
connect(**dic)  #输出为字典的value,

【关于全局变量和局部变量】

一 局部变量

  1 函数里面定义的变量为局部变量

二 全局变量

  1 大家都可以使用的就是全局变量

  2 全局变量一般定义在最上方

  3 建议全局变量少用:局部变量在使用的时候占用内存,一旦不使用就释放,但是全局变量只要当前python文件打开状态就一直占用内存,而且不安全

# 全局变量:尽量少用
# 一般定义在上方
# 都可以使用的就是全局变量
language = "python"
def hello():
    print("我正在学习的语言是:"+language)
hello()


# 局部变量:在自己的函数里面进行了变量的定值,即使已经有了全局变量,那么会优先选择自己函数里面的变量
language = "python"   #这是全局变量
def hello():
    language = "java"   #这是局部变量
    print("我正在学习的语言是:"+language)
hello()



# 对应场景:此时有一个全局变量,函数A进行了局部变量,那么函数A调用的时候采用的是局部变量的值;但是函数B一旦使用变量的话,
# 那还是全局变量的值,这样的情况怎么办呢?
# 那么函数A可以在自己的函数里面进行声明,变量为全局变量而不是自己的局部变量,这样函数B使用的时候调用的值即和A一致
# 也就是说一开始声明的全局变量失效,此刻需要使用global,如下:
language = "java"
def hanshuA():
    global language
    language = "python"
    print("我已经声明了变量就是python,我喜欢的语言是:"+ language)
def hanshuB():
    print("我是函数B,我喜欢的语言也是:" + language)
hanshuA()
hanshuB()
print(language)

  4 global与可变类型与不可变类型==理解这一点真的考验我语言理解能力

  针对可变的数据类型:list  dic字典  集合 =======》如果想要当前函数被调用使用函数内的变量值,不必在函数内global;

  针对不可变的数据类型:int  元组  str =========》必须在函数里面里面进行global;

# #定义可变类型的全局变量
g_num = [1,2,3]
print("函数外", g_num) #输出列表内容

def modify():
    # global g_num   #针对可变数据类型,此处的global加不加均可
    g_num.append(4)
    print("函数内", g_num) #输出声明的列表内容

modify()

#针对可变数据类型,验证在上面函数未加global此时输出的结果:
print("函数外", g_num)# 输出为函数里面的列表内容,即使没有加gloal,因为列表为可变数据类型



# #定义不可变类型的全局变量
g_num = (1,2,3)   #定义一个元组,元组是不可变数据类型
print("一开始的全局变量是:", g_num) #10

def modify():
    global g_num  #在函数里面进行声明,这样出了函数进行输出依然为此刻函数里面的数据;如果此刻不加blobal,声明只在函数里面生效
    g_num = (100,100,100)
    print("函数内加global的函数:", g_num)

modify()

#此时修改后,函数外面的输出结果验证:
print("后面的调用结果:",g_num) #输出为函数里面声明的:100,100,100

【内置函数】

# 输出模块可调用的方法
import random
print(dir(random))

# 输出变量可以调用的方法
s = "abc"
print(dir(s))

# 进行排序,输出的是一个list,输出格式固定
s = "abc123456"
s = sorted(s)
print(s)


dic = {1,2,3,6,8,4}
print(sorted(dic))

# 反转排序,返回的是一个list,只能转list才能看到结果,否则就是一个对象
print(list(reversed(s)))


# 判断可迭代的对象(list)里面是否都为真:非空即真,非零即真
# print(all([1,2,3,4,]))


# 判断可迭代的对象(list)里面是否有一个为真:非空即真,非零即真
# print(any([1,2,3,4,]))


# 把判断的对象转化成布尔类型,判断是否为空,返回false或者true
# print(bool([]))

# 打印数字对应的ascii码,和ascii列表一致
# print(chr(65))  #在ascii表里面这个输出对应的是:A


# 执行python代码:s里面是一个字符串,字符串里面有python的代码,使用该方法就可以进行变量里面python代码的运行
# s = 'print("hello world")'
# print(exec(s))

# s = "print('helloworld')"
# exec (s)

# # 执行python代码:但是使用eval方法适用的是针对运行简单的代码
s = eval("1+1")
b = eval("{1,2,3,4,5}")
print(s)
print(b)

【递归】

  1 递归就是函数自己调用自己

  2 最多循环999次

  3 用递归的时候一定要定义一个结束的条件

def test1():
    num = int(input('please enter a number:'))
    if num%2==0:#判断输入的数字是不是偶数
       return True #如果是偶数的话,程序就退出了,返回true
    print('不是偶数请重新输入!')
    return test1()#如果不是偶数的话继续调用自己,输入值
print(test1())#调用test

【匿名函数lambda】

hanmm = lambda X:X+1 #冒号前面是入参,后面是返回参
# 上面的代码等同下面的两行,变量等同函数,入参为冒号前面的,return为冒号后面的
# def hanmm(X):
#     return (X+1)

s = hanmm(3)
print(s)

【关于 Map】

  1 作用是循环调用函数的

  2 map会把函数里面的每一次调用的返回值保存,最后返回

def add_prx(name):
    return "qianzhui---%s"%name
stus = ["guoyanan","jiajinju","hujiangchuan"]
result = list(map(add_prx,stus))
print(result)

【关于filter】

1 也是循环调用函数使用的

2 过滤传入的参数,函数结果返回的是Ture就保存,如果是False就不要了

# def add_prx(name):
#     return "qianzhui---%s"%name
# stus = ["guoyanan","jiajinju","hujiangchuan"]
# result = list(filter(add_prx,stus))
# print(result)


# stu_score = [60,30,50,70,99,100,67]
# def panda(score):
#     return score >= 60
#
# result = list(filter(panda,stu_score))
# print(result)


# =========上面和下面是相同的,两种写法

stu_score = [60,30,50,70,99,100,67]
result = list(filter(lambda score:score>=60,stu_score))
print(result)

【os模块】========》important

# os模块
import os
#列出某个目录下面的文件和文件夹,路径前面加"R"是为了防止转编译
# print(os.listdir(r"/Users/gdd/PycharmProjects/BestTest/BestTest004"))


# 返回的是true或者false,判断路径下的东西是不是文件或者文件夹
# print(os.path.isfile("/Users/gdd/PycharmProjects/BestTest/BestTest004/os常用模块.py"))   #判断是不是文件
# print(os.path.isdir("/Users/gdd/PycharmProjects/BestTest/BestTest004/os常用模块.py"))    #判断是不是文件夹


# 利用os下面的两个方法可以进行文件的创建
# os.makedirs("gyn.text")
# os.mkdir("abc.text")

# os.makedirs("guo/yanna")  #父目录如果不存在的话就会帮你创建,所以建议使用这个方法进行文件的创建
# os.makedir("han/ya")      #由于未有名字为han的父目录,所以创建文件ya失败


# 进行文件的重新命名,第一个输入原来的文件名称,后面输入想要修改的文件名称
# os.rename("ceshi.py","自己练习")


# 获取当前目录
# print(os.getcwd())

# 进入某个目录下:
# os.chdir(r"/Users/gdd/PycharmProjects/BestTest/BestTest003")  #进入某个目录下
# os.makedirs("测试")

# 获取电脑的CPU个数
# print(os.cpu_count())



# 执行操作系统命令的,只能查看结果,但是拿不到
# print(os.system("ifconfig"))
# 命令结果可以拿到的:
# result = os.popen("ifconfig").read()
# print("这是拿到的返回的结果====",result)


# 删除文件夹:
# os.rmdir("guo")   只能删除空的文件夹,如果文件夹下有内容删除不了


# 获取文件大小,输出为文件的字节大小
# a = os.path.getsize("/Users/gdd/PycharmProjects/BestTest/BestTest004")
# print(a)

# 很厉害的Walk模块:指定文件夹,会输出文件夹下所有的文件夹和文件
# 注意:1 三个值可以随意命名;2 三个值的名字必须都得写
# for a,b,c in os.walk(r"/Users/gdd/PycharmProjects/BestTest/BestTest004"):
#     print("当前文件夹目录:",a)
#     print("当前目录下的文件夹:",b)
#     print("当前目录下文件夹里面的文件:",c)
#     break


# 告诉你一个指定目录,找到目录下有哪些文件
# 1 获取目录下有哪些文件
# 2 判断文件名是否以.mp4结尾
'''
def find_movie(path):
    for cur_dir,dirs,files in os.walk(path):
        for file in files:
            if file.endswith(".mp4"):
            # if files in "字符串":   #验证如果一个文件包含某些字符
                print("在这个目录下发现了以.mp4格式结尾的文件:%s" % cur_dir)
                break

find_movie("/")   #在/目录下即查找所有的路径
'''


# 获取上一级目录的名字
# print(os.path.dirname(r"/Users/gdd/PycharmProjects/BestTest/BestTest004/os常用模块.py"))

# 该模块根据当前系统自动确定路径分割符,进行连接生成路径
# print(os.path.join("user","wenjian.text"))   #输出:user/wenjian.text


# 判断文件是否存在,返回True 或者 False
# 可以传绝对路径 or 相对路径
# print(os.path.exists("os常用模块.py"))

# 分割文件的路径和文件名
# 如果文件为空,返回为空
# print(os.path.split("/Users/gdd/PycharmProjects/BestTest/BestTest004/os常用模块.py"))
# print(os.path.split("/Users/gdd/PycharmProjects/BestTest/BestTest004/"))


# 输出文件的绝对路径
# print(os.path.abspath("函数.py"))
# print(os.path.abspath("../BestTest003/abc.text"))
# print(os.path.abspath("../函数.py"))


print(os.path.getmtime("/Users/gdd/PycharmProjects/BestTest/BestTest003/collection.py"))   #获取文件的修改时间
print(os.path.getctime("/Users/gdd/PycharmProjects/BestTest/BestTest003/collection.py"))   #获取文件的创建时间
print(os.path.getatime("/Users/gdd/PycharmProjects/BestTest/BestTest003/collection.py"))   #获取文件最近被访问的时间

【time常用模块】

# 表达时间的方式
# 1 时间戳:从计算机诞生的那一天到现在过了多少秒
# 2 格式化好的时间
import time

# 输出当前格式化好的时间
# s = time.strftime("%Y-%m-%d %H:%M:%S")
# print(s)

# 获取当前时间的时间戳
# s = time.time()
# print(s)

# time.gmtime(1560675002)    #取标准时区的时间

# time.sleep(10) #睡眠10秒钟再运行

# 时间戳和时间格式化互相转换
# 时间元组:时间戳和格式化时间互相转换的话需要中间先转化成时间元组、
# 001==》操作时间戳转化成格式化时间
# time_stuple = time.localtime(1560675002)  #先把时间戳转成时间元组:
# print(time.strftime("%Y-%m-%d %H:%M:%S",time_stuple))  #再把时间元组的结果按照自己想要的结果转成格式化时间
# 002==》操作格式化的时间转成时间戳时间a
# time_stuple = time.strptime("2019-6-20 18:20:35","%Y-%m-%d %H:%M:%S")#格式化好的时间转成时间元组
# print(time_stuple)
# print(time.mktime(time_stuple)) #时间元组转化成时间戳

转载于:https://www.cnblogs.com/guodengdeng/p/11048742.html

猜你喜欢

转载自blog.csdn.net/weixin_33862993/article/details/93346077
今日推荐