• Python随手记


    目录

    一、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( )虽然也能将字符串转换为整数, 但是其效率非常低:

    1. from time import time
    2. st=time()
    3. ans=[]
    4. for i in range(10000000):
    5. ans.append(eval(str(i)))
    6. print("ok")
    7. 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 方法,查找子串出现的所有位置 

    1. import re
    2. s = 'http∶//sports.sina.com.cn/'
    3. str1 = "com"
    4. # finditer 方法,查找子串出现的所有位置
    5. starts = [each.start() for each in re.finditer(str1, s)]
    6. ends = [start + len(str1) - 1 for start in starts]
    7. span = [(start, end) for start, end in zip(starts, ends)]
    8. 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 配置

    1. pip install pip -U
    2. 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

     一键安装多个包:

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

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

    5、卸载库

    pip uninstall numpy
  • 相关阅读:
    RabbitMQ—持久化
    第二次上机作业 大连理工大学
    python分享之读取xml文件
    Java多线程/总述
    Mac Typora + PicGo + Github配置图床
    git bash指北
    SpringBoot、Vue、Nginx配置 https 并部署发布
    【Git系列】Github指令搜索
    Linux shell编程学习笔记5:变量命名规则、变量类型、使用变量时要注意的事项
    【Spring】Spring中更简单的存储和读取Bean手术刀剖析
  • 原文地址:https://blog.csdn.net/m0_62808124/article/details/127784022