# 单行注释
print('Hello World!')
"""
多行注释内容
支持换行
"""
money = 10
type() 语句
print(type('Hello World!')) # <class 'str'>
print(type(123)) # <class 'int'>
print(type(1.23)) # <class 'float'>
print('你是谁?')
name = input()
print('Get !!! 你是: %s' % name)
level = 10
if level >= 10:
print('初级')
elif level >= 40:
print('中级')
else:
print('高级')
i = 1
while i < 100:
i += 1
i = 1
while i <= 9:
j = 1
# 内层循环的 print 语句, 不要换行, 通过 \t 制表符进行对齐
while j <= i:
print(f'{j} * {i} = {j * i}\t', end='')
j += 1
i += 1
# print 空内容, 就是输出一个换行
print()
获得一个数字序列
语法格式:
注意事项:
定义
返回值
# 多个返回值
def test():
return 1, 2
x, y = test()
print(x) # 1
print(y) # 2
传参
def userInfo(name, age, gender):
print(f'名字:{name}, 年龄:{age}, 性别:{gender}')
# 默认传参
userInfo('Tom', 18, '男')
# 关键字传参
userInfo(name='Tom', age=18, gender='男')
# 参数默认值(必须写在最后)
def user_info(name, age, gender='男'):
print(f'名字:{name}, 年龄:{age}, 性别:{gender}')
user_info('Bob', 20)
# 不定长位置传递
def user_info(*args):
print(args) # 元组类型
user_info('Tom') # ('Tom')
user_info('Tom', 18) # ('Tom', 18)
# 不定长关键字传递
def user_info(**kwargs):
print(kwargs) # 字典类型
user_info(name='Tom', age=19) # {name: 'Tom', age: 19}
user_info(name='Bob') # {name: 'Bob'}
一个特殊的字面量,用于表示:空、无意义。
name = None
暂不赋予具体值try:
print('Hello')
except Exception as e:
print(e)
else:
print('没有异常')
finally:
print('有无异常都会执行')
内置模块
# 导入time模块
import time
# 使用time模块的方法
time.sleep(5)
# 导入time模块的所有方法
from time import *
# 使用sleep方法
sleep(5)
# 导入time模块的sleep方法
from time import sleep
# 使用sleep方法
sleep(5)
# 别名
import time as t
# 使用sleep方法
t.sleep(5)
# 别名
from time import sleep as sl
# 使用
sl(5)
自定义模块
# moudle.py
# 暴露出去的方法,不写则是暴露全部方法
__all__ = ['testA']
def testA(a, b):
print(a + b)
def testB(a, b):
print(a - b)
# 在当前文件运行时才会执行
if __name__ == '__main__':
testA(1, 2)
# index.py
# 跟模块文件同级目录
import moudle as *
testA(1, 2)
# testB 不能使用,因为没有暴露出来
自定义包
import my_package.my_module1
from my_package import my_module2
# ensure_ascii=False 不使用unicode编码
data = [{"name":"张大山","age":11},{"name":"王大锤","age":13},{"name":"赵小虎","age":16}]
json_str = json.dumps(data, ensure_ascii=False)
# 将JS0N字符申转换为Python数据类型[(k:V,k:v},{k:V,k:v}]
s = '[f"name":"张大山","age":11},{"name":"王大锤","age":13},{"name":"赵小虎","age":16}]'
1 = json.loads(s)
# 使用 Union 类型,必须先导包
from typing import Union
my_list: list[Union[int, str]][1, 2, "itheima", "itcast"]
def func(data: Unilon[int,str]) -> Union[int,str]:
pass
def outer(num1):
def inner(num2):
nonlocal num1 # nonlocal 关键字修饰外部函数的变量,才可在内部函数中修改它
num1 += num2
print(num1)
return inner
fn = outer(10)
fn(10)
fn(10)
def outer(func):
def inner():
print('我睡觉了')
func()
print('我起床了')
return inner
@outer # 相当于把 sleep 传入到 outer 中
def sleep():
import random
import time
print('睡眠中......')
time.sleep(random.randint(1, 5))
sleep()
# 我睡觉了
# 睡眠中......
# 我起床了
可修改,支持重复元素且有序
# 常用的操作方法
list = ['1', '2', '3']
# 1.查找某元素在列表的索引,不存在会报错
index = list.index('2')
# 1
# 2.插入元素
list.insert(1, '4')
# ['1', '4', '2', '3']
# 3.追加单个元素
list.append('5')
# ['1', '4', '2', '3', '5']
# 4.追加"一批"元素
list.extend(['6', '7', '8'])
# ['1', '4', '2', '3', '5', '6', '7', '8']
# 5.删除元素
del list[1]
# ['1', '2', '3', '5', '6', '7', '8']
list.pop(0)
# ['2', '3', '5', '6', '7', '8'] 返回被删除元素
list.remove('2')
# ['3', '5', '6', '7', '8'] 删除第一个匹配的元素
# 6.统计某元素在列表中的数量
list.count('3')
# 7.清空列表
list.clear()
# 8.统计列表中有多少个元素
len(list)
定义元组使用小括号,且使用逗号隔开各个数据,数据可以是不同的数据类型。不可修改且有序(只读列表)
# (元素1, ..., 元素n)
tup = ('1', '2', '3')
# 1.查找某元素在元组的索引,不存在会报错
index = tup.index('2')
# 1
# 2.统计某元素在元组中的数量
tup.count('3')
# 3.统计元组中有多少个元素
len(tup)
序列支持切片,即:列表、元组、字符串,均支持进行切片操作
切片:从一个序列中,取出一个子序列
语法:序列[起始下标:结束下标:步长]
表示从序列中,从指定位置开始,以此取出元素,到指定位置结束,得到一个新序列:
list = [0, 1, 2, 3, 4, 5, 6]
# 1.从1开始,4结束,步长1
result1 = list[1:4]
# [1, 2, 3]
# 2.从头开始到结束,步长2
result2 = list[::2]
# [0, 2, 4, 6]
# 3.从3开始,到1结束,步长-1
result3 = list[3:1:-1]
# [3, 2]
无序(不支持下标访问),不可重复,允许修改
# 定义
my_set = {'hello', 'world'}
# 1.添加新元素
my_set.add('it')
# {'hello', 'world', 'it'}
# 2.移除元素
my_set.remove('hello')
# 3.随机取一个元素
my_set.pop()
# 4.清空
my_set.clear()
# 5.取两个集合的差集
set1 = {1, 2, 3}
set2 = {1, 5, 6}
set3 = set1.difference(set2)
# set3 {2, 3}
# 6.清除两个集合的差集
set1 = {1, 2, 3}
set2 = {1, 5, 6}
set1.difference_update(set2)
# set1 {2, 3}
# 7.合并两个集合
set1 = {1, 2, 3}
set2 = {1, 5, 6}
set3 = set1.union(set2)
# set3 {1, 2, 3, 5, 6}
# 8.统计集合的数量
set1 = {1, 2, 3, 5, 6}
num = len(set1)
# num 5
# 9.遍历集合
set1 = {1, 2, 3, 5, 6}
for ele in set1:
print(f"{ele}")
提供基于Key检索Value的场景实现
定义语法:
{ key: value, key: value, ..., key: value }
注意事项:
open() 打开函数
open(name, mode, encoding)
# 示例代码
f = open('python.txt', 'r', encoding='UTF-8')
# encoding 的顺序不是第三位,所以不能用位置参数,用关键字参数直接指定
mode 常用的三种基础访问模式
操作 | 功能 |
---|---|
文件对象 = open(name, mode, encoding) | 打开文件获得文件对象 |
文件对象.read(num) | 读取指定长度字节,不指定num读取文件全部 |
文件对象.readline() | 读取一行 |
文件对象.readlines() | 读取全部行,得到列表 |
for line in 文件对象 | for循环文件行,一次循环得到一行数据 |
文件对象.close() | 关闭文件对象 |
with open() as f | 通过with open语法打开文件,可以自动关闭 |
f = open('D:/test.txt', 'w', encoding='UTF-8')
f.write('Hello World!')
# 刷新,将内存中积攒的内容,写入到硬盘的文件中
f.flush()
# close 方法,内置了 flush 功能
f.close()
构造方法的名称:__init__
class Student:
def __init__(self, name, age):
self.name = name
self.age = age
stu1 = Student('张三', 18)
写在类里面的函数,通过 self 关键字访问类的成员变量(不占用参数位置)
class Student:
name = None
def say_hi(self, msg):
print(f'{msg},我是{self.name}')
stu1 = Student()
stu1.name = '张三'
stu1.say_hi('大家好') # 大家好,我是张三
class Student:
def __init__(self, name, age):
self.name = name
self.age = age
def __str__(self):
return f'Student类对象,name={self.name},age={self.age}'
def __lt__(self, other):
return self.age < other.age
def __le__(self, other):
return self.age <= other.age
def __eq__(self, other):
return self.name == other.name
stu1 = Student('张三', 18)
stu2 = Student('李四', 19)
print(stu1) # Student类对象,name=张三,age=18
print(stu1 < stu2) # True
print(stu1 > stu2) # False
print(stu1 == stu2) # False
仅供內部使用的属性和方法,不对外开放。
定义:以__
开头
语法:
class 类(父类[, 父类2, ......, 父类n])
类内容体
class Phone:
IMEI = None
producer = 'HM'
def call_by_5g(self):
print('父类的5g通话')
# psaa 关键字,表示内容体为空
class MyPhone1(Phone):
pass
# super关键字调用父类
class MyPhone2(Phone):
producer = 'ITCAST' # 复写父类的成员属性
def call_by_5g(self): # 复写父类的成员方法
print(super().producer) # 使用父类的成员属性
super().call_by_5g(self) # 使用父类的成员方法
print('子类的5g通话')
pip install pymysql
from pymysql import Connection
from pymysql import Connection
# 获取MySQL数据库的链接对象
conn = Connection(
host='localhost', # 主机名(或IP地址)
port=3306, # 端口,默认3306
user='root', # 账户名
password='123456', # 密码
autocommit=True # 自动提交(确认)
)
# 获取游标对象
cursor = conn.cursor()
conn.select_db('test') # 选择test数据库
# 使用游标对象,执行sql语句
cursor.execute('select * from student')
# 获取查询结果
results: tuple = cursor.fetchall()
for r in results:
print(r)
# 关闭数据库的连接
conn.close()