开启虚拟环境
创建虚拟环境
python -m vuev [tutorial-env]
运行虚拟环境
[tutorial-env]\Scripts\activate.bat
包管理工具基本操作
- 下载包
pip install novas pip install requests ==2.6.0 下载对应版本
- 卸载包
pip uninstall novas
- 显示包信息
pip show flask
- 将包列表输出到requirements.txt中,方便统一下载
pip freeeze > requirements.txt
输入输出测试工具
- 输入
input("请输入你的名字?")
input()函数提供程序与用户的交互功能,input函数返回值数据类型为字符串
- 输出
print('山西优逸客') print('山西优逸客','PythonWeb',1+1) print('山西优逸客',end="\n")
print()函数可以传入一个参数,也可以传入多个参数,参数可以是任意类型包括表达式。
end参数 默认为\n 每次print后会在输出内容最后换行变量
计算机内存储运算结果的容器
变量定义赋值语法
- 普通赋值
a=1
- 链式赋值
a=b=c=1
- 多元赋值
x,y=1,2
变量命名特点
- 变量名不可以是关键字和保留字
- 变量名可以由字母数字下划线组成,数字不开头
- 区分大小写
- 不支持特殊符号,例如 ! @ % $
变量特性
- 不支持自增自减
- 变量可以存储不同的数据类型
数据类型
python常用数据类型分为:bool int float str None list tuple dict set
数据类型
1. 数字类型
* 整数 int
* 浮点数 float
* 0b二进制
* 0o八进制
* 0x十六进制
* 3e2 科学计数法
2. 字符串类型 str
* 字符编码:ASCII GBK GB2312 UTF-8 unicode
* 字符串定义:'' "" ''' ''' """ """
* 转义字符:\' \" \\ \t制表符 \r回车 \n换行
* 前缀 r"abc"取消转义 u"abc" b"abc"兼容性处理 f"abc"模板字符串
模板字符串
name="小白"
print(f"{name}你好")
print("%s你好"%name) # %s str
print("我有%d个手机"%10) #%d 整型
print("day%2d"%10)
print("day%2d"%1)
print("价格为%0.2f元"%10)
print("%s您好,这里有%d个手机,一共价值%0.2f元"%("小白",10,10000))
字符串访问
str1[index] index可以为负
切片
语法 "abcdef"[start:end:step]
start 开始的下标,默认 0
end 结束前的下标,默认 Length
step 步进值 可有可无 默认1
str1="山西优逸客科技有限公司"
print(str1[2:5:1])
print(str1[::])
print(str1[-5:-1])
print(str1[-1:-5:-1])
负号代表逆向
3. None
bool True False
4. 列表
arr=[]
注意:
- 可以定义空列表
- 可以定义只有一个元素的列表
- 元素可以是任意类型 ``` arr=[] arr.append()#末位添加 arr.append("abc") arr.insert(0,"123")#选择位置 print(arr) arr[index] #修改 arr[index] #删除 arr=[1,2,3,4]
arr.remove(1)#删除元素
arr.pop(0)#删除下标
arr.clear()#清空
del arr[0]
打印print(dir(arr))
#### 5. 元组
t1=()
注意:
1. 可以定义没有元素的元组
2. 也可以定义只有一个元素的元组(1,)
3. 元组是不可改变的列表
#### 6. 字典 dict
d1={'name':'xb','age':19} name='name1' d1={name:'xb','age':19} print(d1)
注意:
1. 字典的键值是没有顺序的
2. 字典的键是不可变量(数字类型 字符串 None True False )
## 字典的基本操作
增
d1={'name':'xb','age':19} d1['sex']='男'
d1.update({'sex':'男'})
删除
d1.pop('name') di.popitem()#末位删除 del d1['name']
修改
d1['name']=""
访问
print(d1['name']) d1.get('sex','暂无')
#### 7. 集合 set
s={1,2,3,4,5,6}
注意:
1. 集合是不重复的
##### 集合的基本操作
1. 增加
s={1,2,3,4,5} s.update({7,8,9}) s.update("afdsa") s.update(['aa','bb']) s.add(77) print(s)
2. 删除
s={1,2,3,4,5,6} s.pop #首位删除 s.remove(2) s.clear() print(s)
3. 交集、并集、补集
* 交集
print(s&s1)
```
* 并集
```
print(s|s1)
```
* 补集
```
print(s^s1)
```
int float bool None list tuole dict set
可变数据类型:list dict set
测试数据类型
type()
数据类型转换
int()
float()
str()
bool()
dict()
set()
tuple()
运算符
算数运算符
+ - * / %
//取整 **幂运算
+ 可以连接 字符串 列表元组
* 重复 字符串 列表 元组
print("abc"+"bcd")
print([1,2,3]+[4,5,6])
print((1,2,3)+(4,5,6))
print("abc"*3)
print([1,2,3]*3)
print((1,2,3)*3)
/ 结果为float
print(10/2)
//
print(10//3) #向下取整
** 幂运算
print(2**10)
赋值运算符
= += -= *= /= %= //= **=
关系运算符
> >= < <= == !=
not in in#包含
is/is not #是否为同一个
逻辑运算符
and or not
严格遵循短路原则
三元运算符
print("1>2") if 1>2 else print("2>1")
一元运算符
del
return
global
nonlocal
运算符优先级
索引运算符 x[index] 或 x[index:index2[:index3]] 18、19
属性访问 x.attrbute 17
乘方 ** 16
按位取反 ~ 15
符号运算符 +(正号)或 -(负号) 14
乘、除 *、/、//、% 13
加、减 +、- 12
位移 >>、<< 11
按位与 & 10
按位异或 ^ 9
按位或 | 8
比较运算符 ==、!=、>、>=、<、<= 7
is 运算符 is、is not 6
in 运算符 in、not in 5
逻辑非 not 4
逻辑与 and 3
逻辑或 or 2
流程控制
分支语句
if 条件:
代码块
elif 条件2:
代码块
else:
代码块
循环语句(遍历迭代对象)
for
while
while 条件:
pass
arr=[1,2,3,4,5,6]
for item in arr:
print(item)
arr=range(1,100,1) #生成生成器,range(遍历对象,迭代递增)
print(list(arr))
for i in range(0,10):
print(i)
break continue
for i in range(0,10)
print(i)
if i==5:
break/continue
else:
print("结束")
推导式
分类:
- 列表推导式
arr = [1,2,3,4,5,6]
arr1 = []
for item in arr:
arr1.append(item**2)
arr1=[item**2 fot item in arr]
- 字典推导式
d1
- 集合推导式
函数
函数的定义:
def 函数名([形参]...):
函数体
[return 返回值]
函数的调用
函数名([实参])
参数的用法:
- 必选参数
- 缺省参数,默认参数
注意:默认参数只创建一次,默认参数必须放在必选参数之后
def fn(a,b=10):
return a+b
fn(20)
# def fn(a,b):
# return a+b
# res = fn(20,30)
# print(res)
def fn(a,b=[]):
b.append(a)
print(b)
# fn(20) #[20]
# fn(30)
# fn(40)
fn(10,[])
fn(20,[])
fn(30,[])
- 可变参数
def fn(*arg):
pass
def mysum(a,b,*args):
print(a,b,args)
- 关键字参数
def getUserInfo(**kwargs):
print(keargs)
getUserInfo(age=19,sex12)
参数顺序:
必选参数>缺省参数>可变参数>关键字参数
- 解包
def fn(a,b,c)
print(a,b,c)
t=[10,20,30]
fn(*t)
fn("xb",19)
d1={'name':'xb','age':'19'}
fn(**d1)
返回值用法
def fn():
return 1,2,3,4,5
res = fn()
a,b,c,d,e = fn()
print(res,a,b,c,d,e)
名词解释 闭包:两个发生嵌套关系的函数,内部函数使用外部函数的变量,在全局情况下使用内部函数时发生闭包。保护数据
def fn():
arr=[]
def newFn(a):
arr.append(a)
print(arr)
return newFn
newFn = fn()
newFn(1)
newFn(2)
newFn(3)
newFn(4)
高阶函数 柯里化
mysum(1)(2)(3)
def mysum(a):
def mysum(b):
def mysum(c):
return a+b+c
return mysum3
return mysum2
res = mysum(10)(20)(30)
print(res)
递归:
def jc(num):
if num==1:
return 1
else:
return num*jc(num-1)
def jc(num):
return 1 if num==1 else num*jc(num-1)
装饰器
功能:给原函数添加新的功能
特点,原则:
- 不改变原函数
- 不改变原函数的调用方式
- 同时满足1,2条件
import time
def fn():
time.sleep(1)
print("hello world")
def fn1():
time.sleep(1)
print("hello")
def fn2(fn):
def newFn():
start = time.time()
fn()
end = time.time()
print(f"总时间为:{end-start}")
return newFn
fn=fn2(fn)
fn1=fn2(fn1)
fn()
fn1()
万能传参
staus = 0 #没有登陆 1 登录
def login():
global staus
print("登录页面")
username = input("请输入用户名") #str
password = input("请输入密码")
if username == "123" and password=="123456":
staus = 1
print("登录成功")
else:
print("登录失败")
def authLogin(fn):
def newFn(*args,**kwargs):#万能传参
if staus == 1:
fn(*args,**kwargs)
else:
login()
return newFn
@authLogin
def fn1(id):
print("成绩查看页面%s"%id)
@authLogin
def fn2(id):
print("课程查看页面%s"%id)
login()
fn1(10)
fn2(10)
作用域
global全局
local局部
nonlocal非局部
name = '小白'
def fn():
# global name
name = '小红'
print(name)
def newFn():
# global name
nonlocal name#非局部
name="小黑"
print(name)
newFn()
print(name)
fn()
print(name)