1Python环境安装部署
1.1、环境安装
官方网站下载不同平台。https://www.python.org/downloads/
1.1.1、Linux环境安装
如果是Ubuntu等桌面系统,都已经更新到了Python较新的版本。但多数生产环境使用的还是红帽系
统。
CentOS7默认还是Python2.7,而开发环境如果是高版本Python就带来了问题。为了不破坏当前系统使
用,甚至以后为了多个Python项目部署(这些项目使用不同Python解释器版本),建议使用多版本工
具。
也可以考虑容器部署Python应用程序。
1.1.1.1、pyenv命令
官网 https://github.com/pyenv/pyenv
快捷安装 https://github.com/pyenv/pyenv#the-automatic-installer
https://raw.githubusercontent.com/pyenv/pyenv-installer/master/bin/pyenv-installer ----->安装脚本
https://www.python.org/ftp/python/3.7.7/Python-3.7.7.tar.xz
$ pyenv install -l
$ pyenv install 3.6.9 -vvv
$ pyenv install 3.7.7 -vvv
$ pyenv version 当前python版本,system表示当前操作系统使用的版本
$ pyenv versions 查看所有已经安装版本,*星号表示当前版本
$ pyenv global system 全局使用系统版本的python
$ pyenv shell 3.6.9 指定python版本
$ pyenv local --unset 当前目录与当前版本关系给去掉
1.1.1.2、安装pyenv
# yum install git curl
python编译依赖如下
# yum install gcc make patch gdbm-devel openssl-devel sqlite-devel readline-devel zlib-devel bzip2-devel libffi-devel
创建普通用户
# useradd python && echo 1 | passwd --stdin python
# su - python
1.下载pyenv源码
git clone https://gitee.com/krypln/pyenv.git ~/.pyenv
2.将pyenv 的路径写入配置文件
echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc
echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc
echo -e 'if command -v pyenv 1>/dev/null 2>&1; then\n eval "$(pyenv init -)"\nfi' >> ~/.bashrc
exec $SHELL
3.pyenv-virtualenv 工具下载
git clone https://github.com/yyuu/pyenv-virtualenv.git ~/.pyenv/plugins/pyenv-virtualenv
echo 'eval "$(pyenv virtualenv-init -)"' >> ~/.bashrc
环境变量在当前shell生效
source ~/.bashrc
安装完成管理的版本
pyenv versions
查看.pyenv目录
[python@centos7.8 ~]$ ls .pyenv/
bin completions libexec plugins README.md terminal_output.png
CHANGELOG.md CONDUCT.md LICENSE pyenv.1 shims test
COMMANDS.md Dockerfile Makefile pyenv.d src versions
查看可用版本
$ pyenv install -l | less
1.1.1.3、安装python多版本
$ cd .pyenv/ && mkdir cache && cd cache
上传:
D:\和彩云同步文件夹\Service optimization file\python
https://www.python.org/ftp/python/3.6.9/Python-3.6.9.tar.gz
https://www.python.org/ftp/python/3.6.9/Python-3.7.7.tar.gz
$ pyenv install -vvvv 3.6.9 ----->安装python
$ pyenv install -vvvv 3.7.7 ----->安装python
1.1.1.4、创建项目
mkdir -pv projects/{web,test} && cd projects/web
查看使用的版本
[python@centos7.8 web]$ python -V
Python 2.7.5
指定python版本
[python@centos7.8 web]$ pyenv shell 3.6.9
查看结果
$ python -V
Python 3.6.9 ---->成功指定版本
$ pyenv versions
system
* 3.6.9 (set by PYENV_VERSION environment variable) ---->成功指定版本
3.7.7
全局使用系统版本的python
$ pyenv global system
1.1.1.4、指定具体目录python使用版本
$ pwd
/home/python/.pyenv/cache/projects/web
$ cd /home/python/.pyenv/cache/projects/web
$ pyenv local 3.6.9
查看python在指定目录版本
[python@centos7.8 web]$ python -V
Python 3.6.9
[python@centos7.8 web]$ python
Python 3.6.9 (default, Jul 15 2021, 18:47:55)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-44)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>>
更换目录
$ pwd
/home/python/.pyenv/cache/projects
$ cd /home/python/.pyenv/cache/projects && python -V
Python 2.7.5
1.1.1.4.1、设定的目录具体使用python使用版本
$ pwd
/home/python/.pyenv/cache/projects/test
$ cd /home/python/.pyenv/cache/projects/test
$ pyenv local 3.7.7
查看python在指定目录版本
[python@centos7.8 test]$ python -V
Python 3.7.7
1.1.1.4.2、创建使用隔离虚拟环境
创建虚拟环境
$pwd
/home/python/.pyenv/cache/projects/web
$ pyenv virtualenv 3.6.9 m369
修改虚拟环境
$pwd
/home/python/.pyenv/cache/projects/web
$ pyenv local m369
(m369) [python@centos7.8 web]$
查看创建的隔离环境
[python@centos7.8 web]$ ll /home/python/.pyenv/versions
总用量 0
drwxr-xr-x 7 python python 68 7月 16 10:44 3.6.9
drwxr-xr-x 6 python python 56 7月 15 22:17 3.7.7
lrwxrwxrwx 1 python python 44 7月 16 10:44 m369 -> /home/python/.pyenv/versions/3.6.9/envs/m369
查看目录文件
$ pwd
/home/python/.pyenv/versions/m369
$ ls
bin include lib lib64 pyvenv.cfg
1.1.1.4.3、修改镜像源
$ pwd
/home/python
$ mkdir .pip && cd .pip && touch pip.conf
阿里云镜像加速
$ cat > pip.conf << EOF
[global]
index-url = https://mirrors.aliyun.com/pypi/simple/
[install]
trusted-host=mirrors.aliyun.com
EOF
1.1.1.4.4、pip安装redis服务
pip命令
$ pip install redis
$ pip freeze > requirements
$ pip install -r requirements
pip安装redis服务
$ pwd
/home/python/.pyenv/cache/projects/web
$ pyenv local m369
$ pip install redis
固定redis服务版本
$ pip freeze > requirements ----->固定redis服务版本
安装固定版本的reids
$ pwd
/home/python/.pyenv/cache/projects/web
$ cp requirements ../test/
$ cd ../test/
$ pip install -r requirements
1.1.1.4.5、安装ipython jupyter
(m369-1)$ pwd
/home/python/.pyenv/cache/projects/test
$ pip install --upgrade pip
$ pip install ipython jupyter
进入ipython
(m369-1) [python@centos7.8 test]$ ipython
进入jupyter
(m369-1)$ pwd
/home/python/.pyenv/cache/projects/test
$ pip3 install sklearn && pip install --upgrade nbconvert
$ jupyter notebook --ip=0.0.0.0
token生成
(m369-1) [python@centos7.8 test]$ jupyter notebook --ip=0.0.0.0
[I 12:50:36.705 NotebookApp] 把notebook 服务cookie密码写入 /home/python/.local/share/jupyter/runtime/notebook_cookie_secret
[I 12:50:37.065 NotebookApp] 启动notebooks 在本地路径: /home/python/.pyenv/cache/projects/test
[I 12:50:37.065 NotebookApp] Jupyter Notebook 6.4.0 is running at:
[I 12:50:37.065 NotebookApp] http://centos7.8:8888/?token=7dd7f07b4f08a53ce091c7c0744feb214b0b2d0bb9ea80d2 -->token
[I 12:50:37.065 NotebookApp] or http://127.0.0.1:8888/?token=7dd7f07b4f08a53ce091c7c0744feb214b0b2d0bb9ea80d2
[I 12:50:37.065 NotebookApp] 使用control-c停止此服务器并关闭所有内核(两次跳过确认).
[W 12:50:37.073 NotebookApp] 没有找到web浏览器: could not locate runnable browser.
[C 12:50:37.073 NotebookApp]
To access the notebook, open this file in a browser:
file:///home/python/.local/share/jupyter/runtime/nbserver-55695-open.html
Or copy and paste one of these URLs:
http://centos7.8:8888/?token=7dd7f07b4f08a53ce091c7c0744feb214b0b2d0bb9ea80d2
or http://127.0.0.1:8888/?token=7dd7f07b4f08a53ce091c7c0744feb214b0b2d0bb9ea80d2
[I 12:52:03.027 NotebookApp] 302 GET / (172.31.0.1) 0.900000ms
[I 12:52:03.034 NotebookApp] 302 GET /tree? (172.31.0.1) 1.180000ms
token=7dd7f07b4f08a53ce091c7c0744feb214b0b2d0bb9ea80d2 ----->此为token值
web填入token
image-20210716125503903
a 添加行
b 后加行
image-20210716130926938
ctl + enter 执行
ctl + enter 不下挪动执行命令
shift + enter 下挪动执行命令
image-20210716131213750
print 命令帮助
dd 删除
删除
m 文本编辑
点击 m
shift + enter
image-20210716132213841
ctrl - 减小字体
ctrl - 减小字体
ctrl + 增大字体
1.1.1.4.6、pycharm使用
alt - 字体减小
alt + 字体加大
2计算机基础知识
3Python基础知识
3.1、 个字符
print('a\tb') 一共三个字符
a \t b ----->一共三个字符
\t
image-20210716134745142
3.2、换行
image-20210716134943761
3.3、\ 不转移
print('c:\window\\nt')
c:\window\nt
image-20210716135325363
3.3、r前缀取消所有转移
print(r'c:\window\nt')
c:\window\nt
image-20210716135516689
3.4、
"a \
v"
'a v'
image-20210716135951945
3.5 、““” ““” 换行
"""\
a
b
c
1
2"""
'\na\nb\nc\n1\n2'
image-20210716140252958
3.5.1、’’’ ’’’换行
'''
i'm 10 "aa"a
'''
'\ni\'m 10 "aa"a\n'
image-20210716140514222
3.6、f填括号
a = 100
b = 'abc'
print(f'{a} -- ** {b} -- {a}')
100 -- ** abc -- 100
image-20210716140913554
3.7、标识符
1. 一个名字,用来指代一个值
2. 只能是字母、下划线和数字
3. 只能以字母或下划线开头
4. 不能是python的关键字,例如def、class就不能作为标识符
5. Python是大小写敏感的
标识符约定:
不允许使用中文,也不建议使用拼音
不要使用歧义单词,例如class_
在python中不要随便使用下划线开头的标识符
a = 100 #不需要指定类型,赋值时就有了类型,赋值即定义 强类型
3.8、str强类型转换
print('a' + str(1)) ----->强类型语言
%%js
console.log('a' +1) ---->图型显示
image-20210716143319330
4运算符和内建函数
4.1、/整除
1/2, 1//2
(0.5, 0)
image-20210716143832722
4.1.1、%整除
1%2, 2%2, 3%2, 4%2
image-20210716143952706
4.2、** 幂
2 ** 3, 2**2,3**0.5
(8, 4, 1.7320508075688772)
image-20210716144311805
4.3、<<移位
1<<0, 1<<1,1<<2,1<<3
(1, 2, 4, 8)
4.4、比较运算符
4.4.1、bool and bool
5 > 3 and 'abc' ---->bool and 字符串 #? false等价, 短路问题,返回值
'abc'
true and 'abc'
1 x 'abc' = 'abc'
5 > 3 and 3 < 4 #bool and bool,布尔值两边都是布尔值则为真
True
image-20210716153942329
True and 'abc'
'abc'
1 x 'abc'
image-20210817173116880
4.4.2、设置短路运算符and
True and 'abc' and ''
''
1 x 'abc' x '' = ''
c = True and 'abc' and '' ----->此值返回值为空
c
''
d = True and 'abc' and '' and 1234 and True ----->此值返回值为空,被短路
image-20210817173853363
d = True and 'abc' and '' and 1234 and True
bool(d),bool('') ----->bool(d)相当与空串为false
(False, False)
image-20210817174835578
4.4.3、设置短路运算符or
"True" or 0 or True or 123 ----->真加任何东西都等于真,为真后直接被短路
1 + 0
'True'
"True" or 0 and '' and 1234 and True
'True'
0 or '' or 1234 or True
1234
假 + 假 + 1234(真)= 1234
image-20210817182442728
if not '': ---->将不为假的输出
print ('*****')
*****
if 0 or '' or 1234 or True:
print ('*****')
*****
4.5、赋值运算符
a = min(3, 5,1)
a ----->a=1
1
a += 1
a
3 ----->a=3
a = a + 1
a
4 ----->a=3
b = 'a'
b += 'b'
b
'ab' ----->b='ab'
4.5.1、累加符应用
b = 'a'
b += 'b' ---->相互等价
b
'ab' ----->b='abbb'
b = b + 'b' ---->相互等价
b
'abbbb'
image-20210818225444827
4.5.2、累乘符应用
a *=2
a
8 ----->a=8
单目运算符>双目运算符
算数运算符 > 位运算符 > 比较运算符 > 逻辑运算符
-3 + 2 > 5 and 'a' > 'b'
搞不清楚就使用括号。长表达式,多用括号,易懂、易读。
4.6、表达式赋值即定义
由数字、符号、括号、变量等的组合。有算数表达式、逻辑表达式、赋值表达式、lambda表达式等
等。
Python中,赋值即定义。Python是动态语言,只有赋值才会创建一个变量,并决定了变量的类型和
值。
如果一个变量已经定义,赋值相当于重新定义。
4.7、内建函数
内建函数 函数签名 说明
print print(value, …, sep=’ ‘,end=’’) 将多个数据输出到控制台,默认使用空格分隔、
input input([prompt]) 在控制台和用户交互,接收用户输入,并返回字符串
int int(value) 将给定的值,转换成整数。int本质是类
type type(value) 返回对象的类型。本质是元类
isinstance isinstance(obj, class_or_tuple) 比较对象的类型,类型可以是obj的基类
print(1,2,3,sep='\n', end='***')
type(1) # 返回的是类型,不是字符串
type('abc') # 返回的是类型,不是字符串
type(int) # 返回type,意思是这个int类型由type构造出来
type(str) # 返回type,也是类型
type(type) # 也是type
print(isinstance(1, int))
print(isinstance(False, int)) # True
4.7.1、类型查看
1, type(1) ----> 查看1的类型
(1, int) ----> 1为整型,type(1)中1的类型为int
'int' ----> 'int'此为字符串
'int'
'int' == type(1) ----->此两边不是相同类型,所以false
False
'int' == type(1), 'int' == int ----->'int'为字符串,int为类型,int又为内建函数
(False, False)
type(1) == int
True
image-20210818233143315
4.7.2、类型确认
isinstance(1, int) ---->1是int类型么?,是的
True
isinstance('abc', int) ----->显示不是int类型实列
False
type('abc') ----->查看'abc'的类型
str
isinstance('abc', str) ----->'abc'是str类型么? 是的
True
isinstance('abc', (int, str)) ----> 'abc'你是int类型么,你是str类型么? 是的 --->相互等价
True
type('abc') == int or tpye ('abc') == str ----> 'abc'你是int类型么,错误不短路,你是str类型么? 是的 --->相互等价
4.7.3、int整型的转换
int(1.2), int('123'), int('456') ---->1.2浮点数转为整数, '123'字符串转为整数, '456'字符串转为整数
(1, 123, 456)
image-20210818235802327
4.7.3.1、int转进制
int('a', base=16)
10
'a' + str(1), int('ab', 16) + 1
('a1', 172)
4.7.4、float浮点数转换
type(1.0) ----->1.0为浮点数
float
float(135.5) ----> 135.5浮点数显示浮点数
135.5
float('1.2'), int(float('1.2')) ---->'1.2'字符串转换为浮点数,1.2浮点数转换成整数1
(1.2, 1)
float('135.5'), int(float('135.5'))
(135.5, 135)
image-20210819000456990
4.7.5、str字符串转换
str(1), str(1.23) ---->将1转换为字符串'1',将1.23转换为字符串'1.23'
('1', '1.23')
'a' + str(1)
'a1'
4.7.6、input输出字符串
input('plz input your number') ----->input输出的字符串,拿到的都是字符串
plz input your number123
'123'
input('>>')
>>1234
'1234'
a = input('>>')
>>1234
a, type(a)
('1234', str)
a, type(a), int(a) -----—>从'1234'字符串转变为1234整数类型
('1234', str, 1234)
a == 'abc'
True
4.7.7、print打印输出
print(1,2,3)
1 2 3
print(value, ..., sep=' ', end='\n') ---->sep元素之间的分割符为空格,\n为换行符
print(1,2,'abc', [1.2,3])
1 2 abc [1.2, 3]
image-20210821012556482
4.7.7.1、元素之间用sep来定义
print(1,2,'abc', [1.2,3],sep='#') ---->sep元素之间的分割符为#
1#2#abc#[1.2, 3]
print(1,2,'abc', [1.2,3],sep='') ---->sep元素之间的分割符为空
12abc[1.2, 3]
print(1,2,'abc', [1.2,3],sep='\n')
1
2
abc
[1.2, 3]
image-20210821012903232
image-20210821013309361
4.7.7.2、end是接着print打印
print(1) ---->此输出的整数,默认的分割符为end='\n'为换行符
print(2)
print(3)
1
2
3
print(1,end='#') ----->此元素分割符为#
print(2)
print(3)
1#2
3
print(1,'a','b',end='#', sep='| ')
print(2,3)
print(3)
1| a| b#2 3
3
print(1,'a','b',end='#', sep='| ') ----->此元素分割符为#,元素之间使用竖线来定义|
print(2,3,end='\t') ----->'\t'表示一个Tab
print(3)
1| a| b#2 3 3
s = ' ' ----->变量替换,进行赋值
t = '##'
print(1,2,3,sep=s,end=t)
print(100)
1 2 3##100
image-20210821015050576
4.7.7.3、查看打印的描述
print? ------->查看打印描述
print(value, ..., sep=' ', end='\n', file=sys.stdout, flush=False)
image-20210821012437009
5分支循环
5.1、程序控制
顺序
按照先后顺序一条条执行
例如,先洗手,再吃饭,再洗碗
分支
根据不同的情况判断,条件满足执行某条件下的语句
例如,先洗手,如果饭没有做好,玩游戏;如果饭做好了,就吃饭;如果饭都没有做,叫外卖
循环
条件满足就反复执行,不满足就不执行或不再执行
例如,先洗手,看饭好了没有,没有好,一会来看一次是否好了,一会儿来看一次,直到饭
好了,才可是吃饭。这里循环的条件是饭没有好,饭没有好,就循环的来看饭好了没有
5.1.1、单分支
if condition:
代码块
if 1<2: # if True:
print('1 less than 2') # 代码块 ---->一般缩进4个
condition必须是一个bool类型,这个地方有一个隐式转换bool(condition),相当于False等价
if 语句这行最后,会有一个冒号,冒号之后如果有多条语句的代码块,需要另起一行,并缩进
if、for、def、class等关键字后面都可以跟代码块
这些关键后面,如果有一条语句,也可以跟在这一行后面。例如if 1>2: pass
5.1.2、多分支
if condition1:
代码块1
elif condition2:
代码块2
elif condition3:
代码块3
......
else:
代码块
a = 5
if a<0:
print('negative')
elif a==0: ------> # 相当于 a >= 0
print('zero')
else: ------> # 相当于 a > 0,if时候,一定要想一下,要不要写else
print('positive')
positive
a = 5
if a<0:
print('negative')
else: ------> # a >=0
if a == 0: ------> # a >=0
print('zero')
else: ------> # 相当于 a > 0,if时候,一定要想一下,要不要写else
print('positive')
positive
image-20210821020528307
5.1.3、while循环
while循环多用于死循环,或者不明确知道循环次数的场景
while cond:
block
while True: # 死循环
print(1)
pass
a = 10
while a: # 条件满足则进入循环
print(a)
a -= 1
上例执行结果是什么?
为什么?
会不会打印出0?要注意边界的分析
如果a=-10可以吗?如何改?回忆一下,False等价是什么?
count = 10 ------>打印的为10到1
while count: #
print(count,sep='|')
count -= 1
count = 10
while count: #
print(count,end='|')
count -= 1
10|9|8|7|6|5|4|3|2|1|
count = -10
while count: #
print(count,end='|')
count += 1
-10|-9|-8|-7|-6|-5|-4|-3|-2|-1|
image-20210821022523495
5.1.4、for语句
5.1.4.1、range()指定区间
for element in iteratable: # 可迭代对象中有元素可以迭代,进入循环体
block
for i in range(0, 10):
print(i)
for i in range() ----->range()指的是区间
range(1)
range(0, 1)
for i in range(0,3): ----->前包后不包
print(i)
0
1
2
range(1) # range(0,1) range(start, end ) -----> 惰性对象
range(0, 1)
for i in range(3): ----->range(3)计数器,从0开始
print(i+1)
1
2
3
for i in range(0): ----->迭代了,但没看出结果 ------>互相等价
print(i)
for i in range(-2): ------>互相等价
print(i+1)
#偶数
for i in range(10): ------>添加if判断添加输出偶数 ------>互相等价
if i % 2 == 0:
print(i)
0
2
4
6
8
for i in range(10):
if i & 1 == 0: ------>符号不同,打出来偶数 ------>互相等价
print(i)
0
2
4
6
8
for i in range(0,10,2): ------>符号不同,打出来偶数 ------>互相等价
print(i)
0
2
4
6
8
for i in range(8,-1,-2):
print(i)
8
6
4
2
0
#奇数
for i in range(10):
if i % 2 == 1: ------->if i % 2 == 1: 为输出奇数 ------>互相等价
print(i)
1
3
5
7
9
for i in range(10):
if i % 2 : ------->if i % 2 == 1: 为输出奇数 ------>互相等价
print(i)
1
3
5
7
9
for i in range(1,10,2): ------->if i % 2 == 1: 为输出奇数 ------>互相等价
print(i)
1
3
5
7
9
image-20210821124719056
image-20210821131206062
5.1.4.2、continue跳过循环
跳过当前循环的当次循环,继续下一次循环
for i in range(0, 10):
if i % 2 != 0 : continue
print(i)
for i in range(10):
if i % 2 != 0 :
continue
print(i)
for i in range(10):
if i & 1: continue
print(i)
for i in range(10):
if i % 2 == 1:
continue ----
print(i)
0
2
4
6
8
image-20210821131758815
5.1.5、break
结束当前循环
练习:计算1000以内的被7整除的前20个正整数(for循环)
# 计算1000以内的被7整除的前20个正整数
count = 0
for i in range(7, 1000, 7):
count += 1
print(count, i)
if count >= 10:
break
1 7
2 14
3 21
4 28
5 35
6 42
7 49
8 56
9 63
10 70
for i in range(1, 11): -------->乘以7的倍数
print(i, 7 * i)
1 7
2 14
3 21
4 28
5 35
6 42
7 49
8 56
9 63
10 70
count = 0 ------->break打断当前累加7的循环 ------>互相等价
for i in range(7,1000,7):
count += 1
print(count, i)
if count >= 3:
break
1 7
2 14
3 21
count = 0 ------>互相等价
start = 7
while True:
count += 1
print(count, start)
start += 7
if count >= 3:
break
1 7
2 14
3 21
总结
continue和break是循环的控制语句,只影响当前循环,包括while、for循环
如果循环嵌套, continue和break也只影响语句所在的那一层循环
continue和break 只影响循环,所以 if cond: break 不是跳出if,而是终止if外的break所在的循环
分支和循环结构可以嵌套使用,可以嵌套多层。
image-20210823233707338
5.1.6、else子句
如果循环正常结束,else子句会被执行,即使是可迭代对象没有什么元素可迭代
for i in range(0): # 可迭代对象没有迭代
pass
else:
print('ok')
for i in range(0,10):
break
else:
print('ok')
for i in range(0,10):
continue
else:
print('ok')
有上例可知,一般情况下,循环正常执行,只要当前循环不是被break打断的,就可以执行else子句。
哪怕是range(0)也可以执行else子句。
for i in range(2): ------>正常语句执行完,开始执行else语句
print(i)
else:
print('else')
0
1
else
for i in range(0): ------>range(0)什么都没有不打印
print('-----------------')
for i in range(0): ------>else可以执行
print('----------------')
else:
print('else')
else
for i in range(10): -------->打印奇数,else结束
if i % 2:
print(i)
else:
print('else')
1
3
5
7
9
else
for i in range(0): ------>for的else子句,循环正常执行,else子句执行
print('----------')
else:
print('else')
else
for i in range(10): ------>i % 2:是奇数就跳掉,i > 5:就停止,for的else可以少写判断,break的循环不执行else子句
if i % 2:
continue
print(i)
if i > 5:
break
else:
print('else')
0
2
4
6
image-20210823235602815
5.1.7、三元表达式
在Python中,也有类似C语言的三目运算符构成的表达式,但python中的三元表达式不支持复杂的语句
真值表达式 if 条件表达式 else 假值表达式
三元表达式比较适合简化非常简单的if-else语句。
# 判断用户的输入的值,如果为空,输出"empty",否则输出该值
value = input('>>>')
if value:
print(value)
else:
print('empty')
value = input('>>>')
print(value if value else 'empty')
字符串拼接
str(1) + ',' + 'b' # 都转换成字符串拼接到一起
"{}-{}".format(1, 'a') # {}就是填的空,有2个,就使用2个值填充
# 在3.6后,可以使用插值
a = 100;
b = 'abc'
f'{a}-{b}' # 一定要使用f前缀,在大括号中使用变量名
value = input('>>>') ------->input('>>>')输入值,则value值为@@@,否则为empty
if value:
print(value,'@@@')
else:
print('empty')
>>>
empty
value = input('>>>')
if value:
print(value,'@@@')
else:
print('empty')
>>>1
1 @@@
value = input(">>>") ----->相互等价
print(value if value else 'empty')
>>>abd
abd
value = input(">>>")
print(value, '@@') if value else print('empty') ----->相互等价
>>>abcd
abcd @@
value = input('>>>') ---->input('>>>') 输入三个空格,则123空格三个
print(1,2,3, sep=value)
>>>
1 2 3
value = input('>>>') ----->整数值取模,输入22取模为0,则执行else
print(1,2,3, sep=' 'if int(value) % 2 == 1 else '#')
>>>22
1#2#3
image-20210824002451227
image-20210824002745131
image-20210824003205018
5.1.8、字符串拼接
str(1) + ',' + 'b' # 都转换成字符串拼接到一起
"{}-{}".format(1, 'a') # {}就是填的空,有2个,就使用2个值填充
# 在3.6后,可以使用插值
a = 100;
b = 'abc'
f'{a}-{b}' # 一定要使用f前缀,在大括号中使用变量名
str(1) + ',' + 'abc' ----->字符串拼接
'1,abc'
a = 1 -------> 一定要使用f前缀,在大括号中使用变量名
b = 'abc'
c = f'{a},{b}'
print(c)
1,abc
i = 7 ----->"{}*{}".format(j,i)固定此格式
j = 9
"{}*{}".format(j,i)
'9*7'
i = 7
j = 9
"{}*{}=63".format(j,i)
'9*7=63'