python快速入门随笔
基础-快速入门
print打印
1、字符串连接:“+”
2、单双引号转义:“\”
3、换行:“\n”
4、三引号,带格式打印文本
'''文本段落'''
"""文本段落"""
变量
python变量硬性规则:变量只能由文字、数字、下划线组成,不能有除了下划线之外的符号,不能有空格,以及不能数字开头。
python变量命名约定俗成是使用下划线命名法。
1、字母全部小写
2、不同单词用下划线分隔
其他命名法:驼峰命名法,单词用首字母大写分隔
注意:python变量名是大小写敏感
user_age 不等于 user_Age
math库
sqrt函数:平方根
python标准库
注释
# 单行注释,快捷键:Ctrl + /
""" """ 多行注释
数据类型
字符串 str
单引号或者双引号包裹
len():字符串长度
"Hello"[3]:返回字符串指定位置字符
整数 int
浮点数 float
布尔类型 bool
只包含两个值:True和False
空值类型 None
type函数返回数据类型
python执行模式
命令行模式
交互模式
获取用户输入
input函数,一律返回字符串
int函数,其他类型转整数类型
str函数,其他类型转字符型
float函数,其他类型转浮点型
条件语句
if 条件:
执行语句
else:
执行语句
嵌套条件语句
if 条件A:
if 条件B:
执行语句
else:
执行语句
else:
执行语句
多条件语句
if 条件A:
执行语句
elif 条件B:
执行语句
elif 条件B:
执行语句
else:
执行语句
逻辑运算
and or not
优先级:not > and > or
列表
# 定义列表
my_list = [ "值1","值2" ]
# 添加
my_list.append("值")
# 删除
my_list.remove("值)
# 数量
len()函数
# 打印列表
print(my_list)
# 指定索引值
my_list[索引]
# 返回列表最大值
max()
# 返回列表最小值
min()
# 返回排序好的列表
sorted()
字典
# 字典定义
键 : 值
key : value
# 格式
contacts = { "key1":"value1",
"key2":"value2"}
列表不能作为键
# 元组做键
contacts = {("张伟", 23):"123456"
("张伟", 34):"456789"
("张伟", 56):"789456")}
# 新增、更新键值
contacts["key1"] = "123456"
# 判断字典是否存在该键值,返回布尔类型
"key1" in contacts
# 删除键值
del contacts["key"]
# 返回字典长度
len()
# 所有键
dict.keys
# 所有值
dict.values()
# 所有键值对
dict.items()
元组
# 元组定义
tupel = ("值1","值2")
不能修改,增、删,可以作为字典的键
for循环
for循环的迭代对象可以是列表、字典、字符串等等
# for循环格式
for 变量名 in 可迭代对象:
执行语句1
执行语句2
# 例子:定义一个员工体温字典,找出其中提问大于38度的员工
temperature_dict = {"111":36.4,"222":36.6,"333":39}
for staff_id,temperature in temperature_dict.items():
if temperature >= 38:
print(staff_id)
# range函数
range(起始值,结束值,步长)
while循环
# 格式
while A条件:
执行语句B
# 例子:measure_brightness函数返回当前测量的天空亮度
while measure_brightness() >= 500:
# 拍照片
take_photo()
# 总结:
for循环:有明确循环对象或次数
while循环:循环次数未知
格式化字符串
方法一:format方法
# 索引式
year = "虎"
name = "张三"
message_content = """
律回春渐,新元肇启。
新岁甫至,福气东来。
金{0}贺岁,欢乐祥瑞。
金{0}敲门,五福临门。
给{1}及家人拜年啦!
新春快乐,{0}年大吉!""".format(year,name)
print(message_content)
# 关键字式
year = "虎"
name = "张三"
message_content = """
律回春渐,新元肇启。
新岁甫至,福气东来。
金{current_year}贺岁,欢乐祥瑞。
金{current_year}敲门,五福临门。
给{receiver_name}及家人拜年啦!
新春快乐,{current_year}年大吉!""".format(current_year=year,receiver_name=name)
print(message_content)
方法二:f-字符串
year = "虎"
name = "张三"
message_content = f"""
律回春渐,新元肇启。
新岁甫至,福气东来。
金{year}贺岁,欢乐祥瑞。
金{year}敲门,五福临门。
给{name}及家人拜年啦!
新春快乐,{year}年大吉!"""
print(message_content)
练习:打印学生绩点
gpa_dict = {"小明":3.251, "小花":3.869, "小李":2.683, "小张":3.685}
for name,gpa in gpa_dict.items():
print(f"{name}你好,你的当前绩点为:{gpa:.2f}") #字符串拼接,且绩点值保留小数点后两位
函数
DRY原则 不要重复你的代码
# 定义函数
def 函数名(参数1, 参数2):
# 执行代码1
# 执行代码2
# return 返回值
不要重复造轮子,把别人写好高效的代码直接拿来用。
python内置函数,python官方模块,python第三方库都是别人造好的轮子。
引入模块

不推荐使用 import 模块名 from * ,会导入模块所有函数,如果不同模块有两个相同的函数,程序不知道调用的是哪个。
ctrl + 点击函数,可以看到别人函数怎么写的
引入第三方python库时,需要先从互联网下载【pip install】,在通过 import 引入。pypi.org这个网站可以对第三方库进行搜索,python有很多好玩的第三方库,自行探索。
面向对象编程

属性:类具备的特点
方法:类可以做什么
面向对象编程的三大特点:封装、继承、多态
类的定义
类的命名:Pascal命名法

类有一个特殊的方法叫做构造函数,主要作用是定义示例对象的属性,它必须要被命名为__init__,括号里面可以放任意数量的参数,但第一个参数永远是被占用的,得用于表示对象自身,约定俗称叫self,它能帮你把属性的值绑定在示例对象上。
class 类名:
# 类代码
def __init__(self, 参数1, 参数2):
# 构造函数代码
# 例如:定义一个可爱猫猫类,并创建对象,打印猫猫名字
class CuteCat:
def __init__(self,cat_name,cat_age,cat_color):
self.name = cat_name
self.age = cat_age
self.color = cat_color
cat1 = CuteCat("jojo", 2, "橙色")
print(cat1.name)
定义类中方法
def 方法名(self, 参数1, 参数2):
# 代码
方法传参中的self一个作用是可以让我们在方法里面去获取或者修改和对象绑定的属性。
要调用类方法就用对象、点、方法名。
父类、子类、继承
子类 继承 父类
class 子类(父类){}
super().init(参数1,参数2) 继承父类构造函数
# 类继承联系:人力系统
# 员工分为两类:全职员工 FullTimeEmployee、兼职员工 PartTimeEmployee
# 全职和兼职都有“姓名 name”、“工号 id”属性
# 都具备“打印信息 print_info”(打印姓名、工号)方法。
# 全职有“月薪 monthly_salaty”属性
# 兼职有“日薪 daily_salary”属性、“每月工作天数 work_days”的属性。
# 全职和兼职都有“计算月薪 calculate_monthly_pay”的方法,但具体计算过程不一样。
class Employee():
def __init__(self,name,id):
self.name = name
self.id = id
def print_info(self):
print(self.name+self.id)
class FullTimeEmployee(Employee):
def __init__(self,name,id,monthly_salaty):
super().__init__(name,id)
self.monthly_salaty = monthly_salaty
def calculate_monthly_pay(monthly_salaty):
return monthly_salaty
class PartTimeEmployee(Employee):
def __init__(self, name, id, daily_salary, work_days):
super().__init__(name, id)
self.daily_salary = daily_salary
self.work_days = work_days
def calculate_monthly_pay(self):
salary = self.daily_salary * self.work_days
return salary
操作文件
电脑目录结构
绝对路径:对于Linux系统,绝对路径是从跟目录出发的路径。对于Windows系统,以分区名加反斜杠开头。
相对路径:.当前路径,..上级路径
打开文件
open(文件路径,模式,编码方式)函数打开文件,返回文件对象
文件路径:"./data.txt"
模式:“r”读取模式(只读)。“w”写入模式(只写),可以省略不写,默认是读取模式。
编码方式:encoding="utf-8"
文件路径下找不到会报 FileNotFoundError 错误,提示文件不存在
读文件
文件对象 read()方法,一次性读取文件所有内容,并以字符串进行返回,代码喜欢txt纯文本
调用read()函数,再调用read(),会返回空值。因为第一次read已经读到末尾了,所以第二次读返回空值。
文件特别大的时候不要用read(),会占用非常大的内存。
f.read(10)读1-10个字节内容
还可以使用readline()方法读文件,读取一行内容。常与 while 语句连用
f = open("./data.txt, "r",encoding="utf-8")
line = f.readline() #读第一行
while line != "": #判断当前行是否为空
print(line) #不为空则打印当前行
line = f.readline() #读取下一行
redlines()方法会读全部文件内容,并把每行作为列表元素返回,常与 for 循环连用
f = open("./data.txt", "r", encoding="utf-8")
lines = f.readlines() #把每行内容储存到列表里面改
for line in lines: #遍历每行内容
print(line) #打印当前行
read():返回全部文件内容的字符串
readline():返回一行文件内容的字符串
readlines():返回全部文件内容组成的列表
关闭文件资源
f.close() #关闭文件,释放资源
方法一:
f.opent("./data.txt")
print(f.read())
f.close()
方法二:
with open("./data.txt") as f:
print(f.read()) #对文件操作
写文件
写文件时,如果文件路径下不存在该路径,会直接创建。如果原本文件已经存在会把原来文件进行清空再写入。write()方法不会自动换行。
“a”附加模式。“r+”同时支持读写模式。
# 任务1:在一个新的名字为“poem.txt”的文件里,写入以下内容:
# 我欲乘风归去,
# 又恐琼楼玉宇,
# 高处不胜寒。
#
# 任务2:在上面的“poem.txt”文件结尾 处,添加以下两句:
# 起舞弄清影
# 何似在人间。
#任务1
with open("poem.txt", "w", encoding="utf-8") as f:
f.write("我欲乘风归去,\n又恐琼楼玉宇,\n高处不胜寒。\n")
#任务2
with open("poem.txt", "a", encoding="utf-8") as f:
f.write("起舞弄清影,\n")
f.write("何似在人间。")
异常处理
异常类型


常见异常
IndentationError:缩进错误
ImportError:导入模块错误
ArithmeticError:计算错误
IndexError:索引错误
ZeroDivisionError:分母为零错误
SyntaxError:语法错误
ValueError:值错误
KeyError:键错误
AttributeError:属性错误
捕捉异常
try:
# 可能会出现异常代码;
except 异常类型:
# 报错后执行代码;
示例:
# 异常捕捉
try:
user_weight = float(input("请输入您的体重(单位:kg):")) # 有可能产生错误的代码
user_height = float(input("请输入您的身高(单位:m):"))
user_BMI = user_weight / user_height ** 2
except ValueError:
print("输入不合理数字,请重新运行程序,并输入正确的数字。") # 输入值错误时会运行
except ZeroDivisionError:
print("身高不能为零,请重新运行程序,并输入正确的数字。") # 除数为0时会运行
except:
print("发生了未知错误,请重新运行程序。") # 产生了其他错误会运行
else:
print("您的BMI值为:" + str(user_BMI)) # 没有错误会运行语句
finally:
print("程序结束运行。") # 不管是否发生错误都会运行
从上往下执行的分支语句,进入一个分支,就不会执行其他分支语句。
测试python代码
bug:在1947年的某一天,一位叫格蕾丝·赫柏的计算机科学家经过一天检查,终于发现机器发生敌障的原因是有只蛾子钻进继电器里被电死了,导致硬件出现问题。虫子在英文里是bug,所以这个词后来在计算机领域被用来表示“程序错误”。
测试的意义:帮我们测试所写的代码是否符合我们的预期
python测试代码
assert 语句:assert“断言”,后面可以跟上任何布尔表达式,测试时在后面跟上我们预期为True的预期值,如果assert计算结果为True无事发生,如果Flase就会产生AssertionError,程序终止提示程序员运行结果不符合预期。
assert 语句局限性:一旦出现AssertionError,程序就会终止,无法测试剩下的代码。所以一般会使用专门做测试的库,能一次性跑多个测试用例,直观展现测试结果。
unittest
unittest就是一个很常用的Python单元测试库,这个unittest库是Python自带的不需要安装,但是还是需要用import语句导入
单元测试:对软件中的最小可测试单元进行验证
测试代码放到独立文件,不和要测试的功能混在一起,更好的区分实现代码和测试代码
使用

# from my_calculator import my_adder 导入需要测试类的方法
# class TestMyAdder(uniteest.TestCase) 明确该类继承自uniteest类
# test_ 每一个测试用例都是类下面的一个方法,命名必须以test_开头,因为unittest这个库会自动搜寻test开头的方法,而且只把test 并头的当成测试用例。

import unittest
def my_adder(a, b):
return a + b # 加法实现正确
class TestMyAdder(unittest.TestCase):
def test_positive_with_positive(self):
self.assertEqual(my_adder(5, 3), 8) # 修正预期值
# 建议添加更多测试用例,确保函数健壮性
def test_negative_with_positive(self):
self.assertEqual(my_adder(-5, 3), -2)
def test_zero_values(self):
self.assertEqual(my_adder(0, 0), 7)
self.assertEqual(my_adder(5, 0), 5)
if __name__ == '__main__':
unittest.main()

带构造函数的单元测试
import unittest
class SentenceTest:
def __init__(self, sentence):
self.sentence = sentence
# 返回句子字母数量
def letter_count(self):
return len(self.sentence)
# 返回句子单词数量
def word_count(self):
return len(self.sentence.split(" "))
# 返回所有字母大写后的句子
def upper(self):
return self.sentence.upper()
class TestSentence(unittest.TestCase):
def setUp(self):
self.sentence = SentenceTest("hello world!")
def test_str_count(self):
self.assertEqual(self.sentence.letter_count(),12)
def test_word_count(self):
self.assertEqual(self.sentence.word_count(), 2)
def test_upper(self):
self.assertEqual(self.sentence.upper(), "HELLO WORLD!")
实践
import unittest
class ShoppingList:
"""
初始化购物清单,shopping_list是字典类型,包括商品名称和对应价格
例子:{"牙刷": 5, "沐浴露": 15, "电池": 7}
"""
def __init__(self, shopping_list):
self.shopping_list = shopping_list
# 返回购物清单上有多少项商品
def get_item_count(self):
return len(self.shopping_list)
# 返回购物清单商品价格总额数字
def get_total_price(self):
total_price = 0
for price in self.shopping_list.values():
total_price += price
return total_price
class TestShoppingList(unittest.TestCase):
def setUp(self):
self.shopping_list = ShoppingList({"纸巾": 8, "帽子": 30, "拖鞋": 15})
def test_get_item_count(self):
self.assertEqual(self.shopping_list.get_item_count(),3)
def test_get_total_price(self):
self.assertEqual(self.shopping_list.get_total_price(),53)
if __name__ == '__main__':
unittest.main()
高阶函数
在 Python 中,高阶函数(Higher-Order Function) 是指满足以下任一条件的函数:
1. 接受一个或多个函数作为参数;
2. 返回一个函数作为结果。
实践
def calculate_square(num):
return num * num
def calculate_cube(num):
return num * num *num
def calculate_plus_10(num):
return num + 10
def calculate_times_5(num):
return num * 5
def calculate_and_print(num, calculator):
result = calculator(num)
print(f"""
| 数字参数 | {num}
| 计算结果 | {result}
""")
calculate_and_print(7, calculate_times_5)
匿名函数
Python中的匿名函数(也称为lambda函数)是一种无需使用def关键字定义的简洁函数,适用于简单、一次性的操作。其核心定义方式为:
lambda 参数列表: 表达式
其中,lambda是关键字,参数列表可包含零或多个参数,表达式是单行代码且计算结果即为返回值。

实例
x = 10
adder = lambda y: x + y # 访问外部变量x
print(adder(5)) # 输出15[7](@ref)


本文来自博客园,作者:南舟树,转载请注明原文链接:https://www.cnblogs.com/nanzhoushu/p/18907739
浙公网安备 33010602011771号