返回顶部
首页 > 资讯 > 后端开发 > Python >写 Python 脚本,一定要加上这个!
  • 827
分享到

写 Python 脚本,一定要加上这个!

Python函数脚本 2023-05-14 21:05:42 827人浏览 八月长安

Python 官方文档:入门教程 => 点击学习

摘要

使用 python 的人,平时经常会写一些脚本,不管是为了提升工作效率,还是为了满足一些特定的需求,Python 脚本都是一个常见又有用的东西。但是,我最近发现了一个以前不曾察觉的问题,就是脚本里面是否添加 if __name__ == "

使用 python 的人,平时经常会写一些脚本,不管是为了提升工作效率,还是为了满足一些特定的需求,Python 脚本都是一个常见又有用的东西。

但是,我最近发现了一个以前不曾察觉的问题,就是脚本里面是否添加 if __name__ == "__main__":
这个语句,对脚本的使用其实是有很大影响的,并且这里面还有很大的学问。

常见误区

很多朋友在写脚本时比较随意,简单的脚本直接一溜写下来,没有函数,顺序执行。复杂点的脚本,可能会加函数。这种写法可读性比较差,经常让人一眼找不到程序运行的入口和顺序。

而 Python 社区比较推荐的写法是在写脚本时,加上下面这个语句:

def main():
# do something
print("do something.")

if __name__ == "__main__":
main()

大多数人看到这里,会不会说,这有什么,加不加这个没那么重要吧!

先不要忙着不屑,让我们一起来仔细掰扯掰扯!

有什么用

在具体说明 if __name__ == '__main__' 的作用前,先从一个简单的实例直观上感受一下。

# const.py
 
PI = 3.14
 
def train():
print("PI:", PI)
 
train()
# area.py
 
from const import PI
 
def calc_round_area(radius):
return PI * (radius ** 2)
 
def calculate():
print("round area: ", calc_round_area(2))
 
calculate()

我们看下 area.py 的运行结果:

PI: 3.14
round area:12.56

的 PI 变量,在运行的时候,const.py 中函数 train()
中的打印也带过来了,而我们只是引用变量,并没有引用函数,所以这是我们不愿意看到的。

解决这个问题的方法也很简单,我们只需在 const.py 中加上一句:

PI = 3.14

def train():
 print("PI:", PI)

if __name__ == "__main__":
 train()

再次运行 area.py ,输出结果如下:

round area:12.56

这是我们预期的结果。

程序运行入口

丛上述实例可以发现,如果没有 if __name__=="__main__": ,作为 area.py 导入文件时 const.py
中的所有代码都被执行了,而加上之后就只运行导入的部分代码。

这就是 if __name__=="__main__": 显而易见的作用,实际上 if __name__=="__main__": 就相当于是
Python 模拟的程序入口。由于模块之间相互引用,不同模块可能都有这样的定义,而入口程序只能有一个,选中哪个入口程序取决于 __name__ 的值。

我们再来看一个小程序

print("look here")
print(__name__)
 
if __name__ == '__main__':
print("I'm test.py")

程序的运行结果如下:

look here
__main__
I'm test.py

可以发现,此时变量 __name__ 的值为 __main__,所以打印 “I'm
test.py”。如果运行其他文件,通过运行的文件调用本文件,则不会打印该语句,因为程序入口不对,该语句不执行。

代码规范

有了 if __name__=="__main__": 相当于 Python
程序也有了一个入口函数,我们可以清晰的知道程序的逻辑开始于何处,当然还需要我们自觉的把程序的开始逻辑都放在这里。其实,这也是 PyCharm
推荐的作法。

为什么很多优秀的编程语言,比如 C、Java、golangc++ 都有一个 main
入口函数呢?我想很重要的一个原因就是就是程序入口统一,容易阅读。

多进程场景大作用

如果你用多进程来做并行计算,类似这样的代码:

import multiprocessing as mp

def useful_function(x):
return x * x

print("processing in parallel")
with mp.Pool() as p:
results = p.map(useful_function, [1, 2, 3, 4])
print(results)

运行这段代码,控制台会一直打印:


processing in parallel
processing in parallel
processing in parallel
processing in parallel
processing in parallel
processing in parallel
processing in parallel
processing in parallel
processing in parallel

并且程序会不停的报错 RuntimeError。

如果你加上了 if __name__=="__main__": ,程序就会按照预期的进行:

import multiprocessing as mp

def useful_function(x):
return x * x

if __name__ == '__main__':
print("processing in parallel")
with mp.Pool() as p:
results = p.map(useful_function, [1, 2, 3, 4])
print(results)

Python 的多程序就是启动了多个 Python 解器器,每个 Python 解释器都会导入你这个脚本,复制一份全局变量和函数给子进程用,如果有了 if
__name__=="__main__":,那它后面的代码就不会被 import,也就不会被重复执行。否则,这个创建多进程的代码就会被
import,就会被执行,从而无限递归的去创建子进程

总结

if __name__=="__main__": 虽然不是强制的,但是我强列推荐你写脚本时按照这个规范来做。

以上就是写 Python 脚本,一定要加上这个!的详细内容,更多请关注编程网其它相关文章!

--结束END--

本文标题: 写 Python 脚本,一定要加上这个!

本文链接: https://lsjlt.com/news/205906.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 写 Python 脚本,一定要加上这个!
    使用 Python 的人,平时经常会写一些脚本,不管是为了提升工作效率,还是为了满足一些特定的需求,Python 脚本都是一个常见又有用的东西。但是,我最近发现了一个以前不曾察觉的问题,就是脚本里面是否添加 if __name__ == "...
    99+
    2023-05-14
    Python 函数 脚本
  • 如何用Python写个定位脚本
    如何用Python写个定位脚本,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。近期,小伙女朋友一反常态,经常晚回家,就说有事,其他什么也不肯说;于是他找上我,问我...
    99+
    2023-06-02
  • 用python写一个抢购的脚本
    好的,这是用 Python 写的一个抢购的脚本的示例: import requestsdef main(): # 在这里输入你的抢购商品的 URL url = "http://www.example.com/product/123" ...
    99+
    2023-10-05
    java 开发语言
  • 用python写一个windows下的定时关机脚本(推荐)
    由于本人经常使用笔记本共享WiFi,但是又不想笔记本开机一夜(为了低碳环保嘛 ~_~!),所以每次都要用使用DOS命令关机,感觉好麻烦。正好最近在学习Python,于是决定用python写一个定时关机的脚本...
    99+
    2022-06-04
    脚本 定时关机 python
  • 这怎么在SQL Server编写一个自动备份脚本
    本篇文章为大家展示了这怎么在SQL Server编写一个自动备份脚本,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。 创建SQL脚本新建db_backup.sql文件,填入以下内容。-- 定...
    99+
    2023-06-14
  • 用Python编写一个漏洞验证脚本
    目录前言requests模块使用技巧验证结果单线程poc脚本使用多线程颜色标记添加进度条多线程poc脚本总结前言 我们实战经常会遇到以下几个问题: ​ 1、遇到一个利用步骤十分繁琐的...
    99+
    2024-04-02
  • 如何编写一个vbs脚本
    这篇文章主要讲解了“如何编写一个vbs脚本”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何编写一个vbs脚本”吧!代码如下:Set WshShell= WScript....
    99+
    2023-06-09
  • 分享一个简单的python读写文件脚本
    先来看一段创建文件并写入文本的代码,然后作介绍。 #!/usr/bin/env python 'makeFile.py -- create a file' import ...
    99+
    2022-06-04
    脚本 简单 文件
  • 写一个Python脚本自动爬取Bilibili小视频
    目录实验环境准备 API 寻找 && 提取 代码实现 项目链接 我身边的很多小伙伴们在朋友圈里面晒着出去游玩的照片,简直了,人多的不要不要的,长城被堵到水泄不通,老实...
    99+
    2024-04-02
  • 用Python写一个抢演唱会门票的脚本
    import threadingimport timefrom random import randint# 演唱会门票总数量TOTAL_TICKETS = 100# 剩余门票数量remaining_tickets = TOTAL_TICK...
    99+
    2023-09-07
    python 开发语言
  • 用Python写游戏脚本原来这么简单
    前言最近在玩儿公主连结,之前也玩儿过阴阳师这样的游戏,这样的游戏都会有个初始号这样的东西,或者说是可以肝的东西。当然,作为一名程序员,肝这种东西完全可以用写代码的方式帮我们自动完成。游戏脚本其实并不高深,最简单的体验方法就是下载一个Airt...
    99+
    2023-05-14
    游戏 Python 脚本
  • 基于Python编写一个爆炸信息窗口脚本
    目录前言爆炸信息窗口设计思路模块准备删除好友警告源代码批量获取表情包前言 Hello!大家好,有好几天没有跟大家见面咯~不知道大家是否在等待《小玩意儿》专栏的更新呢 上一篇的文章【老...
    99+
    2024-04-02
  • 写一个shell脚本实现视频处理
    目录需求视频处理 ffmpeg裁剪格式转换配置参数sed命令读取时间切片csv转换视频格式上传七牛end需求 去年同事准备做个公司内部的大讲堂网站,将一些内部培训的视频汇总,提供给公司同事观看,网站搭建相对来说比较简单,...
    99+
    2022-07-08
    shell 脚本教程 shell脚本案例
  • Linux上增加自定义脚本的展现量
    前言 在一台linux机器上写好一个脚本以后,希望这个脚本让这台机器上其他用户使用,但是不可能会让别人记住这个脚本的路径,这个时候该怎么办呢? 原理 在回答上面的问题之前,我们首先思考下面这个问题:为什么我们用的很多指令...
    99+
    2022-06-04
    Linux 自定义脚本
  • Linux下python定时执行脚本怎么写
    这篇“Linux下python定时执行脚本怎么写”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Linux下python定时执...
    99+
    2023-06-28
  • 学习JavaScript一定要读这4本书有哪些
    学习JavaScript一定要读这4本书有哪些,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。并非所有人都喜欢在线学习或使用视频教程,有些人...
    99+
    2024-04-02
  • 教你用Python写一个京东自动下单抢购脚本
    1 问题背景 经过无数次抢购失败后,发现商家会不定时的放出少量货源,目测每次会有几台。如果我们编写一个脚本程序24小时不间断监听商品库存,一旦查询到货源便开始尝试自动下单,这样就可以...
    99+
    2023-03-23
    Python自动下单 Python抢购脚本 Python脚本 Python京东抢购
  • 怎么用Python写一个京东自动下单抢购脚本
    本文小编为大家详细介绍“怎么用Python写一个京东自动下单抢购脚本”,内容详细,步骤清晰,细节处理妥当,希望这篇“怎么用Python写一个京东自动下单抢购脚本”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。1 问...
    99+
    2023-07-05
  • 怎么编写一个shell正向解析脚本
    这期内容当中小编将会给大家带来有关怎么编写一个shell正向解析脚本,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。正向解析脚本#!/bin/bashyum install bind&n...
    99+
    2023-06-09
  • 一个实用的iptables脚本的编写方法
    本篇内容介绍了“一个实用的iptables脚本的编写方法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!代码如下:#!/bin/sh#modp...
    99+
    2023-06-09
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作