Python语法基础快速学习-3

Python函数详解

  • 认识Python函数
  • 局部变量与全局变量
  • 函数的定义和调用
  • 函数参数使用详解
# 认识Python函数
'''
函数的本质就是功能的封装。使用函数可以提高编程的效率与程序的可读性。
'''
# 局部变量与全局变量
'''
变量是有生效范围的,这个生效范围我们成为作用域。
作用域从变量出现开始到程序的最末的变量叫做全局变量;
作用域只在局部的变量叫做局部变量。

i = 10 # 全局变量
def func():
    j = 9 # 局部变量
    print(j) # 打印9
print(i) # 打印10
func()
'''
# 函数的定义与调用
'''
函数定义的格式:
def 函数名(参数):
    函数体
调用函数:
函数名(参数)

def abc():
    print("abcde")
abc()
'''
# 函数参数使用详解
'''
参数;与外界沟通的接口,包括形参和实参
形参:函数定义的时候使用的参数是形参
实参:函数调用的时候使用的参数是实参

def func(a,b):
    if (a > b):
        print(str(a)+"比"+str(b)+"大")
    else:
        print(str(b) + "比"+ str(a) + "大或者" + str(b)+"与" +str(a)+ "相等")
func(4,5)
func(10,9)
'''

Python的模块

  • 什么是Python模块
  • Python模块的导入
  • 第三方模块的安装
  • 自定义Python模块
# 什么是Python模块
'''
为了让Python程序实现起来更加方便,我们可以按需求类别将一些常见的功能(函数)组合在一起,形成模块。
以后我们要实现这一类功能的时候,直接导入该模块即可。模块里面的函数叫做模块的方法。
系统中自带的模块在安装目录的lib目录中。
程序段-->功能块(函数)-->模块
'''
# Python模块的导入
'''
用以下两种方式导入模块:
import 模块名 # 导入整个模块
from 模块名 import 方法 # 导入模块中的某个方法

import cgi
cgi.closelog()
from cgi import closelog
'''
# 第三方模块的安装
'''
模块的类别(来源):
1.自带模块
2.第三方模块
3.自定义模块
第三方模块的安装方式:
1.pip方式(网络安装)
2.whl下载安装的方式(下载安装)
3.直接复制的方式
4.anaconda
'''
# 自定义Python模块
'''
除了使用别人的模块,我们也可以自己定义一些模块,自己定义的模块叫做自定义模块。
放入到/usr/local/lib/python3.7/site-packages
然后在终端引用就可以了
user_defined_test.py中的内容:
def hello():
    print("hello, this is my first module!")
终端调用:
import user_defined_test
user_defined_test.hello() # 输出hello, this is my first module!
'''

Python文件操作

  • 文件操作概述
  • 文件操作实战
# 文件操作概述
'''
我们通常会通过手工去打开文本,写入、读取文件等操作,其实我们也可以使用Python程序对文件进行打开、关闭、读取、写入等操作,使用Python进行文件操作可以自动对程序进行处理,比如合并多个Excel表格文件的内容。
'''
# 文件操作实战
'''
# 打开文件
open(文件地址,操作形式)
操作形式:
w:写入
r:读取
b:二进制
a+:追加

# 读取文件
fh.read() #读取全部
fh.readline() #一行一行读取

# 文件的写入

# 关闭文件
fh.close() # 当关闭的时候才会保存文件

fh = open("./text1.txt", "r")
data = fh.read() #读取全部内容
dataLine = fh.readline() #一行一行读取
#print(data)
print(dataLine)#一行一行读取
fh.close() # 关闭文件

dataTmp = "一起学习Python!"
fh2 = open("./text2.txt", "w")
fh2.write(dataTmp)
fh2.close()
dataTmp2 = "学好Python!"
fh3 = open("./text2.txt", "a+")
fh3.write(dataTmp2)
fh3.close()
'''

Python异常处理

  • 异常处理概述
  • 异常处理实战
# 异常处理概述
'''
Python程序在执行的时候,经常会遇到异常,如果中间异常不处理,经常会导致程序崩溃。
'''
# 异常处理实战
'''
# 异常处理格式
try:
    程序
except Exception as 异常处理名称:
    异常处理部分

try:
    for i in range(0, 10):
        print(i)
        if (i == 4):
            print(j)
    print("hello!")
except Exception as err:
    print(err)

for i in range(0, 10):
    try:
        print(i)
        if (i == 4):
            print(j)
    except Exception as err:
        print(err)
print("hello!")
'''

Python面向对象编程

  • 面向对象编程概述
  • 类和对象
  • 构造函数
  • 属性和方法
  • 继承与重载
# 面向对象编程概述
'''
面向对象编程即OOP编程,区别于面向过程编程,面向对象编程比较适合开发大项目,会以更接近人类的思维的角度去写程序。
'''
# 类和对象
'''
类:具有某种特征的事物的集合(群体)。
对象:群体(类)里面的个体。
类是抽象的,对象是具体的。
# 创建类
class 类名:
	类里面的内容
pass 是占位语句,占一个位置,未进行任何处理
# 实例化类
对象名 = 类名()

class cl1:
    pass
a = cl1()
'''
# 构造函数
'''
类在实例化的时候自动首先触发的方法。
构造函数固定名字:
_init_(self, 参数)
self:在类中的方法必须加上self参数
构造函数实际意义:初始化
# 类中声明参数:给构造方法加上参数

class cl2:
    def __init__(self):
        print("i am cl2 self!")
b = cl2()

class cl3:
    def __init__(self, name, job):
        print("my name is " + name +" my job is " + job)
c = cl3("aa", "student")
'''
# 属性和方法
'''
属性:静态的特征。例如:头发,手臂
方法:动态的特征。例如:唱歌,写字

属性:类里面的变量
格式:
self.属性名

方法:类里面的函数
格式:
def 方法名(self, 参数)

class cl4:
    def __init__(self, name, job):
        self.myname = name
        self.myjob = job
d = cl4("bb", "student")
print(d.myname)

class cl5:
    def myfunc1(self, name):
        print(name + " this is myfunc1!")
e = cl5() # 实例化时候不需要给方法传参数,调用时候需要
print(e.myfunc1("cc"))

class cl6:
    def __init__(self, name):
        self.myname = name
    def myfunc1(self):
        print("hello " + self.myname)
f = cl6("dd")
print(f.myfunc1())
'''
# 继承与重载
'''
继承:把某一个或多个类(基类)的特征拿过来。
重载:在子类(派生类)里面对继承过来的特征重新定义。
父类:基类
子类:派生类

# 继承
单继承:父类只有一个
格式:class 子类(父类)
多继承:父类有多个
格式:class 子类(父类,父类)

# 重载
某个家庭有父亲、母亲、儿子、女儿,父亲可以说话,母亲可以写字,
大儿子继承父亲,女儿同时继承了父母并有听东西能力,小儿子继承父亲并优化了说话能力

class father():
    def speak(self):
        print("i can speak!")
class son(father):
    pass
class mother():
    def write(self):
        print("i can write!")
class daughter(father, mother):
    def listen(self):
        print("i can listen!")
class son2(father):
    def speak(self):
        print("i can speak2!")
s = son()
print(s.speak())
d = daughter()
print(d.speak())
print(d.write())
print(d.listen())

# 作业: 将多个Excel表格里面的内容合并到一个文件中。
要点:使用第三方模块操作,比如xlrd、xlwt,需要注意一个Excel中有多个sheet
思路:采用操作Excel模块去实现,比如xlrd、xlwt、openpyxl、xlsxwriter等模块。
xlrd模块主要用于读取Excel表,xlwt和xlsxwriter模块不支持修改表,追加信息时候比较麻烦
解决方法:
A:换成其他模块,例如openpyxl,这种方式较为简单。
B:仍然使用xlwt和xlsxwriter等模块,先将每次读取的信息存储到list(列表)中,然后最后一次写入,这种方式较为复杂。


import xlrd,xlsxwriter
# 设置要合并的所有文件
allxls = ["./test1.xls", "./test2.xls"]
# 设置合并到的文件
endxls = "./endxls.xls"
# 打卡表格
def open_xlsx(file):
    try:
        fh = xlrd.open_workbook(file)
        return fh
    except Exception as err:
        print(str("打开出错,错误为:"+err))
# 获取所有sheet
def getsheet(fh):
    return fh.sheets()
# 读取某个sheet的行数
def getnrows(fh, sheet):
    table = fh.sheets()[sheet]
    content = table.nrows
    return content
# 读取某个文件的内容并返回所有行的值
def getfilect(fh, fl, shnum):
    fh = open_xlsx(fl)
    table = fh.sheet_by_name(shname[shnum])
    num = getnrows(fh, shnum)
    lenrvalue = len(rvalue)
    for row in range(0, num):
        rdata = table.row_values(row)
        rvalue.append(rdata)
    filevalue.append(rvalue[lenrvalue])
    return filevalue
# 存储所有读取的结果
filevalue = []
# 存储一个标签的结果
svalue = []
# 存储一行结果
rvalue = []
# 存储各sheet名
shname = []

# 读取第一个待读文件,获得sheet数
fh = open_xlsx(allxls[0])
sh = getsheet(fh)
x = 0
for sheet in sh:
    shname.append(sheet.name)
    svalue.append([])
    x+=1
# 依次读取各sheet的内容
for shnum in range(0, x):
    for f1 in allxls:
        print("正在读取文件:"+str(f1)+"的第"+str(shnum)+"个标签的内容")
        filevalue = getfilect(fh, f1, shnum)
    svalue[shnum].append(filevalue)
    print(svalue[0])
# 由于append具有叠加关系,分析可得所有信息均在svalue[0][0]中存储
# savlue[0][0]元素数量为sheet标签数(sn)*文件数(fn)
sn = x
fn = len(allxls)
endvalue = []
# 设置一个函数专门获取svalue里面的数据,即获取各项标签的数据
def getsvalue(k):
    for z in range(k, k+fn):
        endvalue.append(svalue[0][0][z])
    return endvalue
# 打开最终写入的文件
wbl = xlsxwriter.Workbook(endxls)
# 创建一个sheet工作对象
ws = wbl.add_worksheet()
polit = 0
linenum = 0
# 依次遍历每个sheet中的数据
for s in range(0, sn*fn, fn):
    thisvalue = getsvalue(s)
    tvalue = thisvalue[polit:]
    # 将一个标签的内容写入新文件中
    for a in range(0,len(tvalue)):
        for b in range(0, len(tvalue[a])):
            for c in range(0, len(tvalue[a][b])):
                print(linenum)
                print(c)
                data = tvalue[a][b][c]
                ws.write(linenum, c, data)
            linenum+=1
    # 叠加关系,需要设置分割点
    polit = len(thisvalue)
wbl.close()
'''
发布了31 篇原创文章 · 获赞 0 · 访问量 785

猜你喜欢

转载自blog.csdn.net/qq_44750620/article/details/104827143