一、Python基础
1.1数据容器对比总结
1、数据容器:
列表 | 元组 | 字符串 | 集合 | 字典 | |
---|---|---|---|---|---|
定义方式 | [ ] | ( ) | " " | { } | {key : value} |
数据类型 | 可混合 | 可混合 | 仅字符 | 可混合 | key:除字典外任意类型。value:任意 |
有序性 | 是 | 是 | 是 | 否 | 否 |
可修改 | 是 | 否 | 否 | 是 | 是 |
2、特点
类型 | 支持 | 不支持 |
---|---|---|
下标索引 | 列表、元组、字符串 | 集合、字典 |
元素重复 | 列表、元组、字符串 | 集合、字典 |
可修改 | 列表、集合、字典 | 元组、字符串 |
3、通用操作
功能 | 描述 |
---|---|
max() | 取出容器中最大的元素 |
min() | 取出容器中最小的元素 |
len() | 容器中元素个数 |
list() | 转列表 |
tuple() | 转元组 |
str() | 转字符串 |
set() | 转集合 |
sorted(序列,[reverse = True]) | 排序,reverse = True为降序,返回列表 |
1.2 函数
1.2.1 函数多返回值
java不可返回多个值,python可以返回多个值,且可以是不同的类型
def test():
return 1, "hello", True
x, y, z = test()
print(x)
print(y)
print(z)
#---------输出结果------------
1
hello
True
1.2.2 函数的多入参
1、固定个数入参
略
2、缺省入参
当传入的参数不足时,函数会自动用默认值补全没有传入的参数
def user_info(name, age, gender='男'):
print(f"姓名:{name},年龄:{age},性别:{gender}")
user_info("小米", "23")
#---------输出结果------------
姓名:小米,年龄:23,性别:男
3、多入参缺省
当一个函数有多个入参,但是调用时不需要传递那么多的参数,则需要使用关键字指定传入的是哪一个参数
定义函数时,不给入参的需要在定义函数时给定默认值
def fun(name, age, gender="男", addr="上海", phone=None):
print(f"name={name},age={age},gender = {gender},phone = {phone},addr = {addr}")
fun("小明", "23", phone="12345678921")
#---------输出结果------------
name=小明,age=23,gender = 男,phone = 12345678921,addr = 上海
4、不定长入参
(1)位置不定长
传入的关键字数量不受限制
def user_info(*args):
print(f"args的参数类型是:{type(args)},内容是:{args}")
user_info(1, 2, 3, 4, '小米', '男')
#---------输出结果------------
args的参数类型是:<class 'tuple'>,内容是:(1, 2, 3, 4, '小米', '男')
(2)关键字不定长
传入的必须是key : value类型的数据
def user_info(**args):
print(f"args的参数类型是:{type(args)},内容是:{args}")
user_info(name='小王', age=11, gender='男', addr='北京')
#---------输出结果------------
args的参数类型是:<class 'dict'>,内容是:{'name': '小王', 'age': 11, 'gender': '男', 'addr': '北京'}
1.2.3 函数作为入参
这是计算逻辑的传递,而非数据的传递
def test_function(compute):
result = compute(1, 2)
print(f"compute的类型是:{type(compute)}")
print(f"计算结果:{result}")
def compute(x, y):
return x + y
test_function(compute)
#---------输出结果------------
compute的类型是:<class 'function'>
计算结果:3
1.2.4 lambda匿名函数
def关键字定义的函数,可以带有名字,可重复调用
lambda定义的函数,没有名字,只能临时调用一次
def test_function(compute):
result = compute(1, 2)
print(f"compute的类型是:{type(compute)}")
print(f"计算结果:{result}")
def compute(x, y):
return x + y
test_function(lambda x, y: x + y)
#---------输出结果------------
compute的类型是:<class 'function'>
计算结果:3
1.3 文件操作
测试文件:F:/test/test.txt
本课程无缝衔接数据开发、人工智能、数据分析,后续挑战30w年薪。
从零基础 开始入门学习Python,开发环境使用最新版python3.10,从软件下载,IDE使用,让学生一步步了解Python,掌握Python基础语法,掌握代码编写的规范和技巧,Bug调试能力,用Python第三方库做出可视化图表。
课程+配套练习学练结合,锻炼学生的自主解决问题的能力和举一反三能力,课堂生动有趣,不枯燥。
1.3.1 读取文件(模式r)
在程序中多次调用read时,下一个read会在上一个read的结尾处接着读取
1、open(全路径, 模式, 编码格式)函数
不会自动close掉文件
f = open("F:/test/test.txt", "r", encoding="UTF-8")
print(type(f))
# read 方法:读取指定字节、指定内容
print(f"读取10个字节的结果:{f.read(10)}")
# print(f"读取全部字节的结果:{f.read()}")
print("----------------------------")
# readlines 方法:从当前光标处开始读取剩余的全部行
lines = f.readlines()
print(f"lines对象的类型{type(lines)}")
print(f"lines对象的内容{lines}")
# readline 方法:从当前光标处开始读取一行
line = f.readline()
print(f"line对象的类型{type(line)}")
print(f"line对象的内容{line}")
f.close()
2、with open(全路径, 模式, 编码格式)函数
当文件操作完毕后,会自动close
with open("F:/test/test.txt", "r", encoding="UTF-8") as f:
print(f"{f.readlines()}")
1.3.2 写入文件(模式w)
1、如果文件不存在,则会新建文件
2、若文件存在,则会清空文件,再写入内容
f = open("F:/test/write.txt", "w", encoding="UTF-8")
f.write("Hello World") # 写入文件
f.flush() # 将文件内容刷新到硬盘(内置了close功能)
1.3.3 写入文件(模式a)
1、如果文件不存在,则会新建文件
2、若文件存在,则会追加写入内容
f = open("F:/test/write.txt", "a", encoding="UTF-8")
f.write("Hello World") # 写入文件
f.flush() # 将文件内容刷新到硬盘(内置了close功能)
1.4 异常
1.4.1 try catch
在except后定义一个元组,用来捕获指定的异常
try:
fr = open("F:/test/ccc.txt", "r", encoding="UTF-8")
1 / 0
print(name)
except (ZeroDivisionError,NameError):
print(f"出现异常:文件不存在,使用w模式打开")
fr = open("F:/test/ccc.txt", "w", encoding="UTF-8")
1.4.2 try catch else
try:
fr = open("F:/test/ccc.txt", "r", encoding="UTF-8")
1 / 0
print(name)
except (ZeroDivisionError,NameError):
print(f"出现异常:文件不存在,使用w模式打开")
fr = open("F:/test/ccc.txt", "w", encoding="UTF-8")
else:
print(f"没有出现异常")
1.4.3 try catch finally
略
1.5 模块
1.5.1 导入python的模块
相当于java中的导包
[from 模块名] import [模块 | 类 | 变量 | 函数 | *] as [别名]
1、方式1
import time # 导入python内置的time模块
time.sleep(10)
2、方式2
from time import sleep
print("你好")
sleep(5)
1.5.2 导入自定义的模块
my_modul.py
def test():
print("我是my_modul.py的test方法")
test.py
from my_modul import test
test()
1、main变量
使用from去导入时,自动执行模块中的方法
若不想再from时去执行内部的函数,可以使用_ name_
from my_modul import test
if __name__ == '__main__'
test(1,2)
原因:python内置了变量_ name_,在导包时,自动将文件的名字赋值给这个变量,因为文件名和main不相等,所以不会执行。但是在单独运行这个文件时,会将这个变量默认复制为变量名,所以会执行这个逻辑
2、all变量
在导包时若使用*导入所有变量,则会正常导入,但是如果将函数名写到all变量中,则才允许导入,相当于java的private类型的方法,仅允许内部使用
__all__ = ['test']
def test():
print("我是my_modul.py的test方法")
def test2():
print("我是my_modul.py的test2方法")
测试类:
from my_modul import *
test()
test2() # 此处无法导入这个函数