首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

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

我发现有不少朋友写 Python 脚本非常随意,要么不用函数,要么函数随处定义,反正第一眼看不出要执行的第一行代码位于何处,这样的脚本可读性很差,而且容易隐藏 bug,解决这个问题很简单,当我们写 Python...明白了这一点,if __name__ == "__main__": 就可以做为区分脚本和库的一个标志,当我们看到 if __name__ == "__main__": 时,就认为这一个可以直接运行的脚本...为什么很多优秀的编程语言,比如 C、Java、Golang、C++ 都有一个 main 入口函数呢?我想很重要的一个原因就是就是程序入口统一,容易阅读。...其实我是这样理解的,Python 的多程序就是启动了多个 Python 解释器,每个 Python 解释器都会导入你这个脚本,复制一份全局变量和函数给子进程用,如果有了if __name__ == "_...当你看到 Python 脚本有 if __name__ == "__main__": 时,就会意识到,这是一个可执行的脚本,当被其他程序导入时,这部分代码不会被执行,而多进程的程序中,这是必须的。

36910

师父给了我一个 .proto 文件,我应该怎么使用?

摄影:产品经理 脆脆的烤鱼皮 回想我年轻的时候,在做一个项目时,需要计算斐波那契数列第 n 项的值。但是我只会使用递归来实现。众所周知,递归算法计算斐波那契数列的效率极差,速度极慢。...于是,我拿到了一个mentors_secret.proto文件,里面的内容非常简单: syntax = "proto3"; message NumToCalc { int32 num = 1...这样我就知道怎么做了。...总结 当我们拿到一个.proto文件,需要去调用gRPC 服务时,我们一般有如下步骤: 自动生成mentors_secret_pb2.py和mentors_secret_pb2_grpc.py文件。...通过.proto文件,可以知道远程函数CalcFib接收一个参数NumToCalc,所以把它导入进来:from mentors_secret_pb2 import NumToCalc,它里面的参数为num

2.8K30
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Python程序员最常犯的10个错误,你中招了吗?

    那就是在每次调用函数前没有对可变参数进行赋值,而认为该参数就是默认值。比如上面的代码,有人可能期望在反复调用foo()时返回'baz',以为每次调用foo()时,bar的值都为[],即一个空列表。...因此,原本正确的代码,在某个函数内部添加了一个赋值语句后,却意外收到了UnboundLocalError的报错信息。...这似乎有点出人意料,因为我们在这里进行循环导入,应该会报错呀! 答案是,在Python中如果仅存在一个循环导入,程序不会报错。如果一个模块已经被导入,Python会自动识别而不会再次导入。...问题在于,在导入b.py的过程中,它试图导入a.py模块,而a.py模块会调用f()函数,f()函数又试图访问b.x变量。...举个例子,在导入模块A的时候,假如该模块A试图导入Python标准库中的模块B,但你已经定义了一个同名模块B,模块A会错误导入你自定义的模块B,而不是Python标准库中的模块B。

    1K10

    Python程序员最常犯的十个错误

    return bar Python程序员常犯的一个错误,就是想当然地认为:在每次调用函数时,如果没有为可选参数传入值,那么这个可选参数就会被设置为指定的默认值。...正是因为这样,才会出现一开始好好的代码,在某个函数内部添加了一个赋值语句之后却出现了UnboundLocalError,难怪会让许多人吃惊。 在使用列表时,Python程序员尤其容易陷入这个圈套。...那么回到我们的示例,当我们导入a.py模块时,它在引用b.py模块时是不会出现问题的,因为b.py模块在被引用时,并不需要访问在a.py模块中定义的任何变量或函数。...这里的问题是,在导入b.py的过程中,它试图引用a.py模块,而a.py模块接着又要调用foo()函数,这个foo()函数接着又试图去访问b.x变量。...举个例子,在导入模块A的时候,假如该模块A试图引用Python标准库中的模块B,但却因为你已经有了一个同名模块B,模块A会错误地引用你自己代码中的模块B,而不是Python标准库中的模块B。

    97670

    5年 Python 功力,总结了 10 个开发技巧

    比如在 PyCharm 中,你可以 Ctrl + 鼠标点击 进入函数的源代码。 那如果没有 IDE 呢? 当我们想使用一个函数时,如何知道这个函数需要接收哪些参数呢?...当我们在使用函数时出现问题的时候,如何通过阅读源代码来排查问题所在呢?...当你在处理异常时,由于处理不当或者其他问题,再次抛出另一个异常时,往外抛出的异常也会携带原始的异常信息。 就像这样子。...最快查看包搜索路径的方式 当你使用 import 导入一个包或模块时,Python 会去一些目录下查找,而这些目录是有优先级顺序的,正常人会使用 sys.path 查看。...如何快速计算函数运行时间 计算一个函数的运行时间,你可能会这样子做 import time start = time.time() # run the function end = time.time

    59410

    如何入手卷积神经网络

    它们的高阶 API keras,在入门者中很受欢迎。 Pytorch,我最喜欢的深度学习框架。纯 Python 实现,因此继承了 Python 的各种优缺点。Python 开发者会很容易上手。...准备数据 导入需要的代码: import numpy as np import pandas as pd from pathlib import Path from fastai import *...你不可以用这部分数据来训练,因为它们只是用来做验证的。当你的卷积神经网络在验证集上效果较好时,很有可能在测试集上也可以提交一个比较好的结果。...这样做只是为了确保训练图片和测试图片采用了完全相同的预处理方式。...当我尝试提交时,我发现需要通过 Kaggle 核来提交 CSV,这是我之前没有注意到的。 ? 图源:Kaggle 幸运的是,核的操作和 Jupyter notebook 非常相似。

    69820

    如何入手卷积神经网络

    它们的高阶 API keras,在入门者中很受欢迎。 Pytorch,我最喜欢的深度学习框架。纯 Python 实现,因此继承了 Python 的各种优缺点。Python 开发者会很容易上手。...准备数据 导入需要的代码: import numpy as np import pandas as pd from pathlib import Path from fastai import *...你不可以用这部分数据来训练,因为它们只是用来做验证的。当你的卷积神经网络在验证集上效果较好时,很有可能在测试集上也可以提交一个比较好的结果。...这样做只是为了确保训练图片和测试图片采用了完全相同的预处理方式。...当我尝试提交时,我发现需要通过 Kaggle 核来提交 CSV,这是我之前没有注意到的。 ? 图源:Kaggle 幸运的是,核的操作和 Jupyter notebook 非常相似。

    69740

    关于Python导入模块,你可能没学透?!

    有时在导入模块时,你想要重命名这个模块。...问题在于,你可能定义了一个与导入模块中名称相同的变量或函数,这时如果你试图使用 os模块中的同名变量或函数,实际使用的将是你自己定义的内容。因此,你最后可能会碰到一个相当让人困惑的逻辑错误。...你可能注意到了,我们是通过多次从同一个模块中导入实现的。...局部导入 当你在局部作用域中导入模块时,你执行的就是局部导入。如果你在Python脚本文件的顶部导入一个模块,那么你就是在将该模块导入至全局作用域,这意味着之后的任何函数或方法都可能访问该模块。...其实,你运行这个文件的时候,Python解释器首先在当前运行脚本所处的的文件夹中查找名叫 math的模块。在这个例子中,解释器找到了我们正在执行的模块,试图导入它。

    83350

    python包package和模块module导入深入详解

    有时在导入模块时,你想要重命名这个模块。...问题在于,你可能定义了一个与导入模块中名称相同的变量或函数,这时如果你试图使用 os模块中的同名变量或函数,实际使用的将是你自己定义的内容。因此,你最后可能会碰到一个相当让人困惑的逻辑错误。...你可能注意到了,我们是通过多次从同一个模块中导入实现的。...局部导入 当你在局部作用域中导入模块时,你执行的就是局部导入。如果你在Python脚本文件的顶部导入一个模块,那么你就是在将该模块导入至全局作用域,这意味着之后的任何函数或方法都可能访问该模块。...其实,你运行这个文件的时候,Python解释器首先在当前运行脚本所处的的文件夹中查找名叫 math的模块。在这个例子中,解释器找到了我们正在执行的模块,试图导入它。

    2.9K10

    Python中一些零碎知识点的补充

    ("sys.platform") #打印操作系统的版本,win32 代表64位系统 "os,sys"一起使用 import os,sys os.system("cls") #清屏,Python得借助操作系统完成清屏的操作..."小时 : 分钟 : 秒"(24小时制)时间格式的代码 import time time = time.strftime("%H:%M:%S") print(time) 这个是我用搜狗输入法打印的时间...,遇到了我再添加 3.4 、 "random"随机数生成库 下面就以一个实例看看random的使用 import random random.seed()#初始化随机数生成器 print("在100...,肯定不可能把所有代码都放在同一个程序中把 前面也介绍过,"Python的库" 其实就是一个"Python"文件,我们写程序只用导入我们定义的这个 "Python文件的名字"即可,下面我们就定义一个最简单模块来看看...,直接运行不会返回任何值,如果不懂函数调用的以及定义的,请看我的这篇博客 Python 中函数的讲解  然后再创建一个文件夹,命名为:import_my_data.py,然后我们调用我们写的模块,然后看看运行结果

    30710

    机器学习 - 朴素贝叶斯分类器的意见和文本挖掘

    在下图中,在训练集上有关于特定句子的样本,并根据其内容分配正面或负面的标志。...如果我们扔一枚硬币,我们的样本空间是两个,因为我们有S = {正面,反面},当我们扔硬币时,正常状态下只有一个事件,硬币只可能是正面或反面。但是投掷骰子时则有六种可能性作为样本空间。...fcn.JPG 在好事件的那一列中,有三个以蓝色表示的正面事件,它们是好事件和正面事件的组合,而在最后一栏中正面事件发生了四次,所以条件概率为三比上四得0.75。...朴素贝叶斯是当我们有大量数据样本时的一种方法,但是他们从一组相互独立的特征中选取有限的值。假设f是目标函数,x将从中选取值的范围,我们的目标是计算最大概率。...import NaiveBayesClassifier from textblob import TextBlob 第5步:导入教学和测试集并使用朴素贝叶斯 train = [ ('It is

    1.1K50

    python模块与包揭秘

    在python中,每一个文件就是一个模块,并且模块导入其它模块之后就可以使用导入模块定义的变量名。 为什么引入模块呢?...reload函数主要是让我们的程序变得更加动态: 只会在第一次导入时,加载和执行该模块代码 之后得导入只会使用已加载得模块对象 reload函数会强制已加载得模块得代码重新载入并重新执行。...import语句后面的模块,这样做的好处就是可以增加确定性,否则当你的工程过大的时候,在不同目录下存在同名文件,那么使用之前的模块导入的方式就会出现问题。...例如当我自定义了一个文件叫做string.py,然后我另一个文件中有import string这么一条语句,目的是导入内建模块string,但是却导入了我自己写的string.py,这是由于在python2.7...中默认先搜索当前目录,然后再去pythonpath里寻找,所以当程序执行到import string时,先找到了我自己写的string.py。

    48910

    关于Python导入模块,你可能没学透?!

    有时在导入模块时,你想要重命名这个模块。...问题在于,你可能定义了一个与导入模块中名称相同的变量或函数,这时如果你试图使用 os模块中的同名变量或函数,实际使用的将是你自己定义的内容。因此,你最后可能会碰到一个相当让人困惑的逻辑错误。...你可能注意到了,我们是通过多次从同一个模块中导入实现的。...局部导入 当你在局部作用域中导入模块时,你执行的就是局部导入。如果你在Python脚本文件的顶部导入一个模块,那么你就是在将该模块导入至全局作用域,这意味着之后的任何函数或方法都可能访问该模块。...其实,你运行这个文件的时候,Python解释器首先在当前运行脚本所处的的文件夹中查找名叫 math的模块。在这个例子中,解释器找到了我们正在执行的模块,试图导入它。

    96230

    用了几年 Python,但你可能连这个都没学透

    Python 风格指南建议将每个导入语句单独成行。 有时在导入模块时,你想要重命名这个模块。...问题在于,你可能定义了一个与导入模块中名称相同的变量或函数,这时如果你试图使用 os 模块中的同名变量或函数,实际使用的将是你自己定义的内容。因此,你最后可能会碰到一个相当让人困惑的逻辑错误。...你可能注意到了,我们是通过多次从同一个模块中导入实现的。...局部导入 当你在局部作用域中导入模块时,你执行的就是局部导入。如果你在 Python 脚本文件的顶部导入一个模块,那么你就是在将该模块导入至全局作用域,这意味着之后的任何函数或方法都可能访问该模块。...其实,你运行这个文件的时候,Python 解释器首先在当前运行脚本所处的的文件夹中查找名叫 math 的模块。在这个例子中,解释器找到了我们正在执行的模块,试图导入它。

    75541

    React报错之Element type is invalid

    a string (for built-in components) or a class/function (for composite components) but got"错误有多个原因: 在导入组件时...可以作为一个React组件使用。 混淆导入导出 另一个常见的错误原因是混淆了默认和命名的导入和导出。 当组件使用默认导出来导出时,你必须确保导入的时候没有使用大括号。...从react-router-dom导入 当我们从react-router而不是react-router-dom导入东西时,有时也会出现这个错误。...当我们试图使用不是函数或类的东西作为一个组件时,会产生"Element type is invalid -- expected a string (for built-in components) or...错误信息 你应该看一下got:后面的错误信息,因为它可能表明是什么原因导致的错误。 当我们使用一个组件时,我们必须确保它是一个函数或一个类。如果你使用任何其他的值作为一个组件,就会引起错误。

    1.8K20

    Python基础 | 新手学Python时常见的语法错误和异常

    语法错误又称解析错误,是我们在刚接触学习Python 时最容易遇到的错误,区区别于异常而言,语法错误非程序执行时的逻辑错误; 即使语句或表达式在语法上是正确的,但在尝试执行时,它仍可能会引发错误,而这个在执行时检测到的逻辑错误被称为异常...错误是由箭头指示的位置 上面 的 token 引起的(或者至少是在这里被检测出的):在示例中,在 print() 这个函数中检测到了错误,因为在它前面少了个冒号 (':') 。...ImportError:当我们试图引入不存在的库时,并且当 from ... import 中的 "from list" 存在无法找到的名称时 In [16]: from os import x Traceback...:')) ValueError: invalid literal for int() with base 10: 'a' 比如当我们使用int对输入对象进行转化为整数时,输入的对象是字符串时,这是一个不合适的参数...就会出现中断程序的提示,我常常在程序执行过程中想复制部分打印信息的时候错使用 Control+C想着复制却使得程序中断的情况。

    7.1K41

    一文弄懂GBDT原理和应用

    如果选用的弱分类器是分类树,类别相减是没有意义的。 1 GBDT算法原理理解简单案例 为了大家能直观地感受GBDT的算法流程,先看一个简单的例子。...从前文知,GBDT算法损失函数的公式如下:且 在第m轮迭代时,可以把fm(x)当成x,fm-1(x)当成x0,T(x;θm)当成Δx。...不过当损失函数不是平方函数时,负梯度只是残差的近似值,并不完全等于残差。 3 GBDT算法流程 本节介绍GBDT算法流程,具体如下: 【1】输入:训练数据集 【2】输出:回归树f(x)。...更大的max_features值将会使模型考虑更多的特征,从而可能提高模型的性能,但同时也会增加计算复杂度和过拟合的风险。 verbose:控制模型训练时的输出信息,如果设置为0,则不输出任何信息。...1 导入基本库并设置文件存放路径 首先导入基本库,并设置数据的存放的地址,代码如下: import os import numpy as np import pandas as pd from

    6.1K10

    Python3 模块

    当我们使用import语句的时候,Python解释器是怎样找到对应的文件的呢?...# 解释器中的副提示符(当我们写一个函数时就会显示这个副提示符) '... ' >>> sys.ps1 = 'C> '  # 把解释器中的主提示符更改为'C> ' C> print('Yuck!')...当我们需要使用一个包下的某个模块时,和其他编程语言一样需要使用 . 来作为访问符。 比如一个模块的名称是 A.B, 那么他表示一个包 A中的子模块 B 。...import语法会首先把item当作一个包定义的名称,如果没找到,再试图按照一个模块去导入。如果还没找到,恭喜一个:ImportError 异常被抛出了。...作为包的作者,可别忘了在更新包之后保证 _all_ 也更新了啊。你说我就不这么做,我就不使用导入*这种用法,好吧,没问题,谁让你是老板呢。

    75330

    一文搞懂 Python 的模块和包,在实战中的最佳实践

    我的项目结构 首先,我并不是一个经验丰富的 Python 开发者,一般像我这样水平的,要么用框架,以其预置的代码结构来管理代码文件和逻辑;要么,就是调包侠,将代码写在同一个或多个 .py 文件中,不用文件目录组织...在设计之初,我就考虑到了模块重名的问题,所以在 main.py 文件头部,我并没有 from 包 import 模块,而是 from 包 import 包,以避免模块命名冲突的问题。...你可以在此文件中,导入其他模块,定义 变量、函数、类 等,进行一些预定义的工作,然后在用 import 导入包或包里的模块时,被导入的包下的初始化文件会被自动调用执行。...,这样在导入后只需用 模块名.符号名 的方式,来引用其中的变量、类或调用其中定义的函数,而不必担心命名冲突的问题。...当我在 spider/realtime/overview.py 文件中,写爬虫的实际业务逻辑代码时,我又遇到了相对导入和绝对导入的问题。

    1.6K41

    令人困惑的TensorFlow!

    当你导入一个库时,你得到的是一组变量、函数和类,他们扩展并补充了你的代码「工具箱」。当你使用它们时,你能预期到返回的结果是怎样的。在我看来,当谈及 TensorfFlow 时,应该把这种认知完全抛弃。...可见,仅仅导入 TensorFlow 并不会给我们生成一个有趣的计算图。而只是一个单独的,空白的全局变量。但当我们调用一个 TensorFlow 操作时,会发生什么?...我们得到了一个节点。它包含常量 2。很惊讶吧,这来自于一个名为 tf.constant 的函数。...幸运的是,这个抽象非常直观。 当我们在依赖于图中其他节点的节点上调用 sess.run() 时,我们也需要计算那些节点的值。...第一行,optimizer = tf.train.GradientDescentOptimizer(1e-3) 不会向计算图中添加节点。它只是创建一个包含有用的帮助函数的 Python 对象。

    1.2K30
    领券