##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)
原文地址:https://www.cnblogs.com/wuchangblog/p/12787318.html