zoukankan      html  css  js  c++  java
  • ##Python自学之路--基本数据类型##

    【第一回】---python基本数据类型

    Ⅰ、字符串

    a:字符串的join(方法)

    import argparse
    
    if __name__ == '__main__':
    
        name = "hello"   
        names = ','.join(name)
        print('Hello to %s'%(names));
    
    >> Hello to h,e,l,l,o

    Ⅱ、列表

    def study_list(length): #36、带有参数的函数
    	l1 = [1,2,3,4,5,9.0]   #37、创建列表,利用符号[]
    	l2 = list(range(10,10+length))  #38、创建列表,也可以用list()
    
    	l3[0]=99  #43、更新列表值
    	print('l2==l3么?',l2==l3)   #44、更新l3后依旧等于l2,因为l3和l2本来就是一个对象,不过换了个名字
    	l4 = l2.copy()  #45、复制一个l2给l4,copy()创建一个一模一样的列表
    	l4[0]=999
    	
    	print('删除前',l4)
    	del l4[0]  #47、del语句进行删除列表值,在python中del可以删除所有的变量
    	
    	l4.append(30)  #48、给列表添加值
    	l4.extend(l1)  #49、给列表追加一个序列多个值
    	print('添加l1后:',l4)
    	l4.reverse()  #50、列表反转
    	print('反转后:',l4)
    	l4.sort()  #51、sort()函数,将列表进行排序
    	print('排序后:',l4)

    2)、从键盘输入列表:

    scores = list(map(int, input("请输入每个士兵的分数:").strip().split(','))) 

    Ⅲ、元组

    def study_tuple(length:int)->bool:  #52、解释参数类型的函数创建,->为返回值类型
    	tuple1 = (1,2,3,4)  #53、创建元组,利用()符号,元组的特性是不可以改变
    	tuple2 = tuple(range(10,10+length))  #54、利用tuple创建元组
    
    	print(tuple1.count(1))  #55、元组函数count(),用于输出某个值的数量
    	print(tuple1.index(1)) #56、元组函数index(),可以按照索引得到值
    	
    	tuple1[0] = 9  #58、因为元组的不可改变性,所以该语句会出错
    	
    	tuple3 = tuple1+tuple2  #60、元组虽然不可改变,但是可以通过+号进行合并为另一个元组
    	print(tuple3,id(tuple3))
    

    Ⅳ、字典

    def study_dict():  #学习python中的字典模型,字典是  键->值 的映射
    	dict1 = {1:'一',2:'二',3:'三',4:'四'}  #61、以下为创建字典的3种方法
    	dict4 = dict([('One',1),('Two',2),('Three',3)])
    	dict5 = dict({1:'一',2:'二',3:'三',4:'四'})
    	
    
    	dict1[1] = '壹' #65、修改字典内容
    	dict1[5] = '五' #66、添加字典
    
    	dict6 = dict1.copy()  #68、字典的复制
    	dict6[1] = 'One'
    	print(dict1,'<dict1------------dict6>',dict6)
    
    	dict1.clear() #69、字典的清空
    	print(dict1)
    	del dict1,dict2,dict3,dict4,dict5,dict6 #70、删除字典,也可以用del dict[key]的方式删除某个键
    

    1):字典添加元素

    a. Test[‘价格’] = 100
    b. xx = {‘hhh’:‘gogogo’}
    Test.update(xx)

    2):字典删除元素

    a. del[aa[‘adress’]]
    b. vv = aa.pop(‘key名称’)
    

    3):字典的遍历

    for item in dict.items():
    print(item)

    Ⅴ、集合

    def study_set(): #python中集合的学习,集合中不存在相等的值
    	set1 = set(['You','Are','Not','Beautiful']) #71、利用set()函数进行创建集合
    	set2 = {'You','Are','So','Beautiful'}  #72、利用{}创建集合,创建空集合的时候不能用{},因为{}表示字典
    	set3 = set2.copy() #73、集合的复制
    
    	print(type(set1))
    	print(set1,set2)
    	print(set1|set2)  #74、集合或运算符,得到两个集合中所有元素
    	print(set1&set2)  #75、集合与运算符,得到两个集合共同元素
    	print(set1^set2)  #76、不同时包含于set1和set2的元素
    	print(set1-set2)  #77、集合差运算,得到set1有,set2没有的元素
    
    	set1.add('Me too') #79、集合添加元素
    	print('is语句用法',set3==set2,set3 is set2,set1 is not set2) #80、is和is not语句,is语句用于判断对象是否一样,==判断值是否一样
    	set3.clear()  #81、清空集合,集合变为空
    	print(set3)
    	del set3
    

     附加:bool类型   (Python中以下情况默认为False)

    Ⅰ:为0的数字,包括0,0.0
    Ⅱ:空字符串,包括’’, “”
    Ⅲ:表示空值的None
    Ⅳ:空集合,包括(),[],{} 其他的值都认为是True。

    【第二回】---python函数

    Ⅰ、迭代器、生成器、装饰器

    1、迭代器:

    a、可迭代对象:只要能iter(对象)的就是可迭代对象。如:list,truple,str,dict,set可以执行遍历都是可迭代对象。

    备注:可迭代对象转换为迭代器,只需要执行iter(对象)即可

    例1:输出一个列表list1,使用iter方法之后为一个迭代器

    >>list1 = [1,2,3,4]
    >>print (iter(list1))             //生成的为迭代器  <list_iterator object at 0x0000027713494F28>
    >>print (next(list1))          //报错Error:TypeError: 'list' object is not an iterator

    b、迭代器:可迭代对象并且能实现next(对象)叫迭代器

    例1:输出一个列表list1,使用iter转换为迭代器,再执行next()方法

    >>list1 = [1,2,3,4]
    >>iter1 = iter(list1)   //转换为一个迭代器
    >>print (next(iter1))   //输出第一个结果 1

    2、生成器:生成器生成有两种方式,一种是列表生成式,一种为yield

    a、yield,,在函数中可以先将yield想象成return

    def foo():
        print("starting........")
        while True:
           res = yield 4
           print("res:",res)
    
    g = foo()      
    print(next(g))
    print("*"*20)
    print(next(g))

    输出:

    解析:(1)、如果没有yield,g = foo() 输出starting........,存在yield为生成器无结果输出,故g = foo()无结果输出

    (2)、第一次遇到next(g)之后,函数开始执行,输出starting........。加上print,将函数结果yield 4返回,故print(next(g))输出前两行

    (3)、输出20个*

    (4)、第二次遇到next(g)之后,函数从yield之后开始执行,此时res的值已经返回,故输出的结果为none,print(next(g))将yield看作return,故再次打印输出4

    例2:包子铺要做包子,如果一次性做1000个,可能存在卖不完浪费的情况,如果吃一个包子,你做一个包子,那么这就不会占用太多空间存储了。

    def eat():
       for i in range(1,10000):
       yield '包子'+str(i)
    ​
    e = eat()
    ​
    for i in range(200):
       next(e)

    Ⅱ、递归函数

    在一个函数里在调用这个函数本身

    例1:从某个目录里面查找日志文件,如果里面的内容是目录,继续执行函数

    import os, sys, datetime,re
    
    # nginx日志存放的路径
    nginxLogPath="/opt/nginx-1.9.5/logs/"
    # 获取昨天的日期
    yesterday = (datetime.date.today() + datetime.timedelta(days = -1)).strftime("%Y-%m-%d")
    # nginx启动的pid文件
    PID = "/var/run/nginx.pid"
    
    def cutNginxLog(path):
        """
        切割nginx日志函数
        :param path: 日志文件的第一级目录
        :return: 
        """
        logList = os.listdir(path)    # 判断传入的path是否是目录
        for logName in logList:      # 循环处理目录里面的文件
            logAbsPath = os.path.join(path, logName)
            if os.path.isdir(logAbsPath):   # 如果是目录,递归调用自己,继续处理
                cutNginxLog(logAbsPath)
            else:         # 如果是日志文件,就进行处理
                # 分割日志
                re_Num = re.compile(r'^[a-zA-Z]')
                # 判断日志文件是否是字母开头,如果是日期开头就不切割
                if re_Num.search(logName):
                    logNewName = yesterday + "_" + logName          # 新日志文件名称列如:2018-11-8_access.log
                    oldLogPath = os.path.join(path, logName)        # 旧日志文件绝对路径
                    newLogPath = os.path.join(path, logNewName)     # 新日志文件绝对路径
                    os.rename(oldLogPath, newLogPath)
    
        cmd = " kill -USR1 `cat %s` "% PID
        res = os.system(cmd)
        if res != 0:
            return "重新加载nginx失败"
    cutNginxLog(nginxLogPath)
  • 相关阅读:
    Numpy库
    使用Python的pandas-datareader包下载雅虎财经股价数据
    python引用库异常总结
    桌面常用快捷键
    第四章 数据的概括性度量
    第三章 数据的图表展示
    python连接MySql数据库
    如何利用scrapy新建爬虫项目
    幼儿教育
    PyMySQL和MySQLdb的区别
  • 原文地址:https://www.cnblogs.com/wuchangblog/p/12787318.html
Copyright © 2011-2022 走看看