第01天-python环境安装部署


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'

 



 





posted @ 2021-04-30 16:33  Jackiezhu  阅读(67)  评论(0)    收藏  举报