python笔记 —— 函数,类,异常,模块导入,读写数据

函数

函数举例

  1. 不需要权限修饰符
  2. 不需要返回值类型
  3. 如果函数中没有return,那么默认返回值时None
# 无参函数
def test():
    print("hello")

# 带参函数
def test1(n):
    print("hello %d"%n)

# 求和
def jiecheng(n):
    sum = 0
    while n>=1:
        sum += n
        n -= 1
    print(sum)

# 递归,阶乘
def jiecheng2(n):
    if n == 1:
        return 1
    return n*jiecheng2(n-1)
print(jiecheng2(5))

函数参数列表中的参数类型

  1. 位置参数
    必传参数,按照形参位置将实际值传入
def cifang(x,y):
    return x ** y
print(cifang(2,3))
#可以像这样加上参数类型的提示信息,但是不按照这样传入也不会报错
def demo2(name:str,age:int):
    print(name)
    print(age)
demo2('zhang',12)
  1. 默认参数
    非必传参数,调用时不填,就使用定义时的默认值
def cifang2(x,y=2):
    return x ** y
#如果下面没有传入y的值,那么就默认y为2,如果传入了y值为3,则按照y=3计算
print(cifang2(3,3))
  1. 可变参数
    非必传参数;以元组的形式存储传入的元素;不限制传入参数的个数;传入的参数类型可以是任意的;用在不知道要传入多少个参数的时候
def sum1(*args):
    sum = 0
    print(args,type(args))
    for i in args:
        sum += i
    return sum
print(sum1(1,2,3,4,5))
#传入任意类型的值
def demo1(*args):
    for i in args:
        print(i)
demo1(12,'abc',[1,2,3,4,5])
#传入一个字典
dict1={
    'firstname':'zhang',
    'lastname':'ding',
    'age':18
}

def testDict(*args):
    for i in args:
        for key,value in i.items():
            print(key)
            print(value)
testDict(dict1)

在这里插入图片描述

# 传入的字典里面有多个字典
dict2={
    'person1':{
        'firstname':'zhang',
        'lastname':'ding',
        'age':18
    },
    'person2':{
        'firstname':'chen',
        'lastname':'zhi',
        'age':14
    }
}
print(dict2)

def testDict2(*args):
    for i in args:
        for person in i.keys():
            for key,value in i[person].items():
                print(value)
testDict2(dict2)

在这里插入图片描述

  1. 关键字参数
    非必传参数;不限制传参个数;以字典的形式保存传入的参数;因为是字典形式,所以调用函数传入实参值的时候需要以k-v格式传入
def demo3(**kwargs):
    # 打印key值
    for k in kwargs.keys():
        print(k)
    # 打印value值
    for v in kwargs.values():
        print(v)
    # 打印key和value值
    for k,v in kwargs.items():
        print(k,'---',v)
demo3(name='zhang',age=12)

在这里插入图片描述
5. 多个参数混杂在一起的情况

def demo4(name,age=12,*args,gender):
    print(name,age,args,gender)
demo4('zhang',1,2,3,gender='nan')

在这里插入图片描述

# 定义一个person类
class person(object):
    def __init__(self,name,age,gender):
        self.name = name
        self.age = age
        self.gender = gender
        self.hobby = 'look book' #固定的属性值
    def run(self):
        print('can run')
    def setAge(self,age):
        self.age = age
    def toString(self):
        print(self.name,self.age,self.gender,self.hobby)

person1 = person('zhang',12,'nan')
person1.run()
person1.toString()
person1.setAge(18)
person1.toString()

# 创建Student类,并且继承自person类
class Student(person):
    def __init__(self,name,age,gender):
        super(Student,self).__init__(name,age,gender)
        self.friend = 'yao'
    def info(self):
        print(self.name,self.age,self.gender,self.friend)
student1 = Student('zhang',12,'nan')
student1.info()

在这里插入图片描述

异常

try:
    print('start')
    print(10/0)
    print('end')
except ZeroDivisionError as e:
    print(e)
    print('请检查除数是否为0')
else:
    print("如果代码没有出现异常则打印此句")
finally:
    print("无论是否出现异常都会打印此句")

在这里插入图片描述

模块导入

在这里插入图片描述
包下面必须包含 init.py文件
在这里插入图片描述
Python源代码文件:*.py
一个py文件是一个模块(module),多个模块可以组成一个包(package)

moduleA.py文件内容为

#直接写的话会在导入的时候就执行
print('hello moduleA')
#写在main方法里面就会在模块被执行时才会执行
if __name__=='__main__':
    print('hello main')

i = 10
def test():
    print('test')

在这个包外面创建一个新的py文件

from pack1 import moduleA as ma

print(ma.i)
ma.test()

在这里插入图片描述
只打印了moduleA这一句,没有打印moduleB这一句

读写文件

读取文件内容

#读文件
f1 = open("data/cource.txt",mode='r',encoding='utf8')
# read(n) 表示读n个字符
# readline 读一行
# readlines 读所有的行 并构成list返回
print(f1.read(10))
print(f1.readline())
print(f1.readlines())

f1.close()

在这里插入图片描述
已经读取的数据会被忽略,之后的读取语句不会再去读取
所以readline读取的的内容不满一行,因为这一行前面的内容被read(10)读取过了

写入文件内容

#写入文件
f2 = open("data/newdata.txt",mode='w',encoding='utf8')
#写入数据时记得加上换行符号 \n
# 逐行写入
f2.write("写入的内容应该是字符串形式\n")
f2.write("否则会类型不匹配,应当是str类型\n")
f2.write("写完后记得关闭f2")
# 一次性写入多行语句
f2.writelines(['第一条数据\n','第二条数据\n','第三条数据\n','第四条数据\n'])
f2.close()

文件不存在时会自动创建
在这里插入图片描述
不过像上面这样每次还要手动关闭close(),有些麻烦,因此可以用with open的形式

# with open 不需要手动的关闭文件
# 读取 cource.txt的数据并写入newcource.txt
with open("data/cource.txt",mode='r',encoding='utf8') as f3:
    with open("data/newcourse.txt",mode='w',encoding='utf8') as f4:
        f4.writelines(f3.readlines())

在这里插入图片描述

从mysql中读取数据

import pymysql

# 创建连接
conn = pymysql.connect(user='root',password='123456',host='master',port=3306,database='student')

#创建游标,类似statement
cursor = conn.cursor()
#返回查询结果的总行数
t = cursor.execute("select id,name,age,gender,clazz from student where clazz like %s and gender = %s ",('理科%','男'))
print(t)
# print(cursor.fetchone())  # 返回一条记录
# print(cursor.fetchmany(3))  # 返回n条记录
# print(cursor.fetchall())  # 返回所有记录 注意使用

#打印读取出来的内容
for i in range(t):
    print(cursor.fetchone())

#关闭连接
cursor.close()
conn.close()

在这里插入图片描述

#同样的这里也可以用 with 的形式来避免close()
with pymysql.connect(user='root',password='123456',host='master',port=3306,database='student') as conn:
    with conn.cursor() as cursor:
        num = cursor.execute("select id,name,age,gender,clazz from student where clazz like %s and gender = %s ",('理科%','男'))
        for i in range(num):
            print(cursor.fetchone())

结果跟上面一样

日期与字符串格式转换

#格式化日期字符串
from datetime import datetime

#字符串转为datetime格式
dt = datetime.strptime("2021-12-14 18:46:00", "%Y-%m-%d %H:%M:%S")
print(dt,type(dt))

print(dt.year)
print(dt.month)
print(dt.day)

#datetime格式转为字符串
#连接符 - 或者 / 都行,连接符是任意的
date_str = datetime.strftime(dt, "%Y/%m/%d %H:%M:%S")
print(date_str,type(date_str))

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一纸春秋

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值