目录

一、eval(input( )) 和 int(input( )) 的区别

二、单引号、双引号、三引号的区别

1、单引号和双引号

2、三引号

三、随机数的生成 

四、字符串中查找子串出现的所有位置 

五、将多个jupyter的.ipynb文件合并为一个 

六、Python文件.py转换为.exe可执行程序 

1、安装pyinstaller 

2、pyinstaller命令转换

3、拓展

七、if __name__ == '__main__':的作用 

八、 Python第三方模块(库、包)的安装、卸载与查看

1、pip.ini 配置

2、查看自己的第三方库默认安装路径

3、已安装的包

4、安装库

5、卸载库


一、eval(input( )) 和 int(input( )) 的区别

一句话提前总结:尽量避免使用 eval( ) 

=====================================================================

输入整数用int(input( ))

输入浮点数用float(input( ))

input( ) 函数的作用是返回用户输入的值,不管输入的是什么(数字、字母或其他字符),返回的值总是一个字符串。

eval( ) 函数的作用是将字符串的引号去掉将参数当做代码执行,如果引号里面是一个数字,返回值则是这个数字本身;如果引号里面是运算表达式,返回值就是表达式的运算结果;如果引号里面是字母(或单词),会报错,如果你原来已经将这个字母(或单词)做了变量,则没有问题;引号里面还可以是又一段python代码,返回值就是执行这段代码。

int( ) 函数的作用是将数字或运算表达式转换为整数,也可以将只包含整数的字符串转换为整数,转不了会报错。

还可以将其他进制的数转换为十进制数,例如:int('12',16) ,12就是一个16进制的数,int( )函数将其用十进制数表示,输出1812要以字符串的形式进行输入,如果是带参数base的话。

注:字符串里前导零并不会影响int( ),但是eval( )会首先将前导零认为是八进制数字, 这也是int( )eval()在整数转换时候不一样的地方(int更胜一筹)。

eval(input( )) 的作用就是将输入的字符串的引号去掉,把输入的字符串直接作为python代码执行,相当于打开一个python窗口,别人输入什么代码就跑什么代码,不一定非得是数字,这个时候其实就有点危险了,字符串可能就变成了一行代码 ,执行起来后果无法预料。例如你之前有 import os,别人通过 input( ) 输入一个 os.system('del /f /q *') (谨慎操作) ,一个 eval( ) 之后你这个文件夹里的文件就没了,如果你使用的是类Unix系统, 并且此时工作目录下有一些源文件,用户输入 __import__('os').system("rm -rf *") ,此时目录中的内容就消失了(谨慎操作)。除非你确实有需要,否则尽量避免用 eval( )  。

int(input( )) 的作用就是将输入的字符串转换为整数,转不了会报错,仅此而已。

eval( )虽然也能将字符串转换为整数, 但是其效率非常低:

from time import time 
st=time()
ans=[]
for i in range(10000000):
    ans.append(eval(str(i)))
print("ok")
print("time :", time()-st)

上面的代码运行时间大概在半分钟以上,而将eval换成int之后程序运行时间只要几秒,足可见其对运行效率的影响。每次运行的时间不一样,因为还受到电脑CPU以及硬件等其他因素的影响,而CPU是动态变化的,如果只看函数本身的话,大概估计 int 的转换效率是 eval 的十倍以上左右。

eval的缺点是执行速度慢,并且会有安全风险。

对比后不难发现,使用eval()函数有诸多问题要注意,不然容易出现问题。

二、单引号、双引号、三引号的区别

1、单引号和双引号

普通用法是相同的,都是用来定义一个字符串的,为什么Python要同时使用两种方法定义字符串,这不重复了吗?其实在定义字符串方面,单引号和双引号是互相补充:

原始字符串中包含单引号,可以使用双引号定义;

原始字符串中包含双引号,可以使用单引号定义;

当用双引号包起来的字符串里包含单引号的时候, 不需要使用转义符(\), 反过来也是一样。当然你也可以继续使用转义符,对字符串中的单引号或双引号进行转义,不过代码的可读性就变糟糕了。

2、三引号

由三个成对的单引号或者三个成对的双引号组成 

三引号的作用是:在输出的情况下,保持字符串的格式不改变

最好在输出的信息量比较多,并且有固定格式要求的时候使用三引号,否则有点大材小用

主要有2大用法:

(1)多行注释:

当文档注释有很多行时候,用这个非常方便。#通常是单行注释,但是注释有多行时,用三引号可以一次性解决 。

使用三引号做注释符的时候一定要注意格式。三引号的前面不能有任何东西,必须要在单独的,新的一行开始。

(2)定义多行字符串:

三引号包含的字符串可由多行组成,可以直接换行,不需要使用“\n”,字符串内容有单引号、双引号时也不需要进行转义。

引号之间的嵌套关系
单引号中可以嵌套单引号【需要使用转义符(\)】
单引号中可以嵌套双引号
双引号中可以嵌套单引号
双引号中可以嵌套双引号【需要使用转义符(\)】
三引号中可以嵌套单引号
三引号中可以嵌套双引号
三引号中不能嵌套三引号 

三、随机数的生成 

① random.random( )
功能:随机生成一个 [0,1) 的浮点数
用法:random.random( )

② random.uniform(a,b)
功能:随机生成一个 [a,b) 的浮点数
用法:number = random.uniform(2,4)

③ random.randint(a,b)
功能:随机生成一个 [a,b] 的整数
用法:random.randint(2,4)

④ random.randrange(a,b,step)
功能:随机生成一个 [a,b) 的整数,step — 指定递增基数,缺省值为1。
用法:random.randrange(2,8)、random.randrange(2,10,2)

⑤ random.choice(sequence)
功能:从一个已有的sequence中随机选择一个元素
用法:random.choice(range(2,10))、random.choice('anbegvdje')

⑥ random.sample(sequence,k)
功能:从某一序列中获取指定长度的随机片段
用法:a = ['楚弥真','蒲深雨','李隐','赢子夜','上官眠']

           b = random.sample(a,2)

⑦ random.shuffle(列表)
功能:打乱一个列表的元素顺序
用法:a = ['楚弥真','蒲深雨','李隐','赢子夜','上官眠']

           random.shuffle(a) # 打乱这个操作不需要重新定义对象,它作用的是对象本身

四、字符串中查找子串出现的所有位置 

直接利用字符串查找方法find()和index(),只能查找字符串首次出现的位置。

利用正则表达式的 finditer 方法,查找子串出现的所有位置 

import re

s = 'http∶//sports.sina.com.cn/'
str1 = "com"
# finditer 方法,查找子串出现的所有位置
starts = [each.start() for each in re.finditer(str1, s)]
ends = [start + len(str1) - 1 for start in starts]
span = [(start, end) for start, end in zip(starts, ends)]
print(span)

五、将多个jupyter的.ipynb文件合并为一个 

借助nbmerge工具包

安装:pip install nbmerge

合并:nbmerge a.ipynb b.ipynb c.ipynb > hebing.ipynb

注:合并后的文件是utf-16编码的,需要转为utf-8编码才可以打开,可以使用Notepad++转码

六、Python文件.py转换为.exe可执行程序 

1、安装pyinstaller 

pip install pyinstaller

2、pyinstaller命令转换

pyinstaller -F quickStart.py

-F参数是指示生成exe文件,quickStart.py就是你想要转换为.exe文件的.py文件了

等待运行结束,运行结束后,我们会发现在我们存放项目的文件夹内会多出两个文件夹,则运行成功,其中我们打包好了的.exe文件就存放在dist文件夹内,然后你将你的exe文件发给别人,就可以运行了。

3、拓展

生成有图标的exe程序,添加参数-icon即可:

pyinstaller --icon=logo.ico -F quickStart.py

 注:py文件和用于做图标的照片需要存放于同一个文件夹中

将图片转换为图标文件的网站:http://www.bitbug.net/

七、if __name__ == '__main__':的作用 

一个python文件通常有两种使用方法:
第一种是作为脚本直接执行

第二种是 import 到其他的 python 脚本中被调用(模块重用)执行。
因此 if __name__ == 'main': 的作用就是控制这两种情况执行代码的过程。
在 if __name__ == 'main': 下的代码只有在第一种情况下(即文件作为脚本直接执行)才会被执行,而 import 到其他脚本中是不会被执行的。
 

八、 Python第三方模块(库、包)的安装、卸载与查看

1、pip.ini 配置

pip install pip -U
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple

-U是update代表升级pip的意思 

设置成功后你的 C:\Users\UserName\AppData\Roaming\pip 路径下会出现一个 pip.ini 配置文件

这样就完成了 pip 默认镜像源配置,以后每次在 cmd 窗口下执行 pip 安装命令,都默认从设定的镜像源下载安装,我使用的是清华的镜像站。

查看当前源:

pip config list

输出上面配置的源域名说明成功! 

2、查看自己的第三方库默认安装路径

python -m site
  • USER_BASE: 安装路径;
  • USER_SITE: 脚本路径。
  • 更改默认路径,去python环境修改Lib 文件夹下的 site.py 文件即可。

    分别修改 USER_SITE 、USER_BASE 的路径即可。

    3、已安装的包

    列出所有包:

    pip list

    查看某个包的安装位置:

    pip show numpy

    4、安装库

    以numpy为例:

    pip install numpy

     一键安装多个包:

    import os
    
    # 将需要安装的库名称放到列表中
    libs = ['nbmerge', 'pyinstaller', 'numpy', 'jieba']
    for lib in libs:
        # 遍历并安装库,注意了:install后面有一个空格!
        os.system("pip install " + lib)

     一键卸载多个包只需将install换为uninstall即可。

    5、卸载库

    pip uninstall numpy
    物联沃分享整理
    物联沃-IOTWORD物联网 » Python随手记

    发表评论