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

Python 进阶指南(编程轻松进阶):五、发现代码异味

在下面的例子中,我将重复的代码移动到一个函数中,然后重复调用该函数: def askFeeling(): print('How are you feeling?')...例如,在一个函数内部但是在一个return语句之后的代码,在一个具有总是False条件的if语句块中的代码,或者在一个从来没有被调用的函数中的代码都是僵尸代码。...空的异常捕捉块 捕捉异常是确保程序即使在出现问题时也能继续运行的主要方法之一。当出现一个异常,但没有except块来处理它时,Python 程序会立即停止运行而崩溃。...你可能已经被告知这些实践中的一些是代码异味,但是它们大部分是好的。我称之为代码异味误解:它们是你可以也应该忽略的警告。让我们来看看其中的几个。...如果您的函数有不止一个try-except语句,并且这些语句没有包含函数的所有代码,这也没什么。 误解:标志参数是不好的 函数或方法调用的布尔参数有时被称为标志参数。

97630

使用 Python 创造你自己的计算机游戏(游戏编程快速上手)第四版:致谢到第四章

我制作的第一个游戏就像这本书中的游戏一样。它们没有我父母为我买的任天堂游戏那么花哨,但它们是我自己制作的游戏。 现在,作为一个成年人,我依然喜欢编程,并且还能从中获得报酬。...函数调用是一条指令,告诉 Python 运行函数内部的代码。例如,你的程序调用print()函数在屏幕上显示一个字符串。print()函数将你在括号中输入的字符串作为输入,并在屏幕上显示该文本。...第 6 行是对 print() 的函数调用。记住,函数就像你程序中的一个小型程序。当你的程序调用一个函数时,它会运行这个小程序。print() 中的代码会在屏幕上显示你传递给它的字符串参数。...使用 for 语句进行循环 for语句标志着循环的开始。循环重复执行相同的代码。当执行到达for语句时,它进入for语句后面的块。在运行完块中的所有代码后,执行将返回到块的顶部,重新运行所有代码。...front of "print" if语句后面的代码块将在if语句的条件求值为True时运行。

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

    Python全网最全基础课程笔记(一)——基础入门

    异常处理 异常处理是Python编程中的重要部分,用于处理程序运行时可能出现的错误情况。 通过try-except语句捕获和处理异常,可以使程序更加健壮和可靠。...语法示例: # 这是一个单行注释 print("Hello, World!") # 这行代码后面的也是注释 在上面的例子中,第一行完全是一个注释,它不会影响程序的执行。...因此,即使没有这个声明,如果你的文件是用UTF-8编码的,并且没有包含非ASCII字符(或者在Python 3中),那么它仍然可以正常工作。...然而,这并不是Python官方推荐的做法,也不是Python语法的一部分。如果你的代码只会在Python解释器中运行,并且不使用Emacs作为编辑器,那么你没有必要使用这种形式的编码声明。...pass 是一个空操作语句,用作占位符。 lambda 用于定义匿名函数(即没有名称的函数)。 assert 用于断言,用于调试目的。 yield 用于在函数内部生成值(在生成器函数中)。

    18400

    Python 自动化指南(繁琐工作自动化)第二版:三、函数

    这就是为什么运行前一个程序时会打印出42。 局部和全局变量同名 从技术上讲,在 Python 中不同作用域的全局变量和局部变量使用相同的变量名是完全可以接受的。但是,为了简化你的生活,避免这样做。...如果您好奇的话,可以看一眼源代码,但是您不需要知道这些函数是如何工作的才能使用它们。因为鼓励编写没有全局变量的函数,所以通常不必担心函数的代码与程序的其他部分相互影响。...time.sleep()函数还没有被介绍,但是可以说它在我们的程序中引入了十分之一秒的暂停。...在本章中,你学习了try和except语句,它们可以在检测到错误时运行代码。这可以使你的程序对常见的错误更有弹性。 练习题 为什么函数在你的程序中有优势?...当函数调用返回时,局部作用域内的变量会发生什么? 什么是返回值?返回值可以是表达式的一部分吗? 如果一个函数没有返回语句,那么调用这个函数的返回值是什么?

    97220

    PEP 255--简单的生成器

    tabnanny.py中的 tokeneater 函数是处理得比较好的例子,它在全局变量中维护了一个状态机,用于记录已出现的 token 和预期会出现的 token 。...这很难正确地工作,而且也挺难让人理解。不幸的是,它已经是最标准的解决方法了。 有一个替代方案是一次性生成 Python 程序的全部解析,并存入超大列表中。...这样 tokenize 客户端可以用自然的方式,即使用局部变量和局部控制流(例如循环和嵌套的 if 语句),来跟踪其状态。...请注意,对于生成器函数和非生成器函数,return 意味着“我已经完成,并且没有任何有趣的东西可以返回”。...请参阅下面的 BDFL 声明部分。 为什么用新的关键字yield而非内置函数? Python 中通过关键字能更好地表达控制流,即 yield 是一个控制结构。

    58720

    【十五】python之异常处理

    print "没有报错" print "这是异常之后的代码" #如果没有上面的异常处理,下面的代码是不会执行的 for i in range(10): print i 捕捉异常: try...我有时在代码里使用assert False来标记没有写完的代码分支,我希望这些代码运行失败。尽管抛出NotImplementedError可能会更好。)...你不是让你的代码防御现在的错误,而是防止在代码修改后引发的错误。理想情况下,单元测试可以完成这样的工作,可是需要面对的现实是,它们通常是没有完成的。人们可能在提交代码前会忘了运行测试代码。...如果我们改变了代码,但没有修改这里的代码,可能会导致错误的调用 run_z_code 函数并引发错误。用防御型的方法来写代码会很好,它能让代码运行正确,或者立马执行错误,即使你在未来对它进行了修改。...我们想象函数与调用者之间有个约定,比如下面的: “如果你传给我一个非空字符串,我保证传会字符串的第一个字母并将其大写。” 如果约定被函数或调用这破坏,代码就会出问题。

    1.2K20

    Python 工匠: 异常处理的三个好习惯

    如果你旁边刚好有一台安装了 Python 的电脑,那么你可以试着跑一遍上面的脚本。你会发现,上面的代码是不能成功执行的。...假如你把眼睛贴近屏幕,非常仔细的检查这段代码。你会发现在编写函数时,我犯了一个小错误,我把获取正则匹配串的方法错打成了 obj.grop(1),少了一个 'u'( obj.group(1))。...随着时间推移,项目也变得越来越庞大,抛出 APIErrorCode 的地方也越来越多。有一天,我正准备复用一个底层图片处理函数时,突然碰到了一个问题。...那时我需要写一个在后台运行的批处理图片脚本,而它刚好可以复用 process_image 函数所实现的功能。...,我们定义了一个名为 raise_api_error 的上下文管理器,它在进入上下文时什么也不做。

    75140

    笨办法学 Python3 第五版(预览)(三)

    在继续下一个练习之前,尝试用自己的话回答这些问题: 你认为if对下面的代码有什么影响? 为什么if下面的代码需要缩进四个空格? 如果没有缩进会发生什么?...if 语句告诉你的脚本,“如果这个布尔表达式为真,则运行其下的代码;否则跳过它。” 为什么if下面的代码需要缩进四个空格?...因为你正在比较数字,如果更改数字,不同的if 语句将评估为True,并且其下的代码块将运行。回去放入不同的数字,看看你是否能在脑海中弄清楚哪些代码块将运行。...将我的答案与你的答案进行比较,并确保你真正理解代码“块”的概念。这对于你做下一个练习很重要,其中你将编写所有可以使用的if 语句的部分。 将这个输入并使其工作。...如果你创建了一个函数,你可以稍后运行该函数,但它仍然没有你真正需要做出决策的分支。现在你有了 if、else 和 elif,你可以开始编写决策性的脚本了。

    16010

    笨办法学 Java(一)

    我可以教你 Java,即使你以前从未编程过,甚至不是天才。但我可能会有点作弊。 我将教给您的是 Java。但它并不是所有的 Java。我必须略去一些部分,因为您还没有准备好。...然后它会在屏幕上闪烁光标,等待你输入一个单词。当我运行程序时,我输入了单词“巴黎”,但即使你输入一个不同的单词,程序也会正常工作。...以下代码应该可以编译,但它可能不会按照你的期望工作。 我故意在代码中制造了一个逻辑错误。...因此,由于这整个练习中的所有 if 语句的主体只有一行代码,所以这个练习中的所有 if 语句的花括号都是可选的。你可以删除并且程序会正常工作。...这个 else 关注前面的if语句——第 15 行的那个——以确定它是否应该运行它的代码块或自动跳过它。假设你输入了 BMI 为22.5,那么前面的if语句不成立,也没有运行。

    35610

    Python程序员经常犯的10个错误,这些坑你踩过吗?

    它内建了高级的数据结构,结合了动态类型和动态绑定的优点,这使得它在快速应用开发中非常有吸引力,并且可作为脚本或胶水语言来连接现有的组件或服务。...所以在上面的代码中,由于class C中的x属性没有找到,它会向上找它的基类(尽管Python支持多重继承,但上面的例子中只有A)。换句话说,class C中没有它自己的x属性,其独立于A。...很多人会感到很吃惊,当他们给之前可以正常运行的代码的函数体的某个地方添加了一句赋值语句之后就得到了一个 UnboundLocalError 的错误。...尽管上面的例子非常明显,但是许多高级开发者在更复杂的代码中也并非是故意而为之的。 幸运的是,Python包含大量简洁优雅的编程范例,若使用得当,能大大简化和精炼代码。...最后,非常感谢您阅读我的文章!有任何问题可以后台私信我,我都很乐意解答。

    54700

    Python Lambda函数是什么,如何使用它们?

    这些 函数(也称为 匿名函数)类似于你自行构建的那些函数,但没有名称。 但是这些函数有什么用呢?简单来说,当你想要编写一个只包含简单表达式的函数时,可以使用 Lambda 函数。...当然,我们必须定义 a,我们可以在 print() 函数中像这样进行定义: print(x(10)) 整个代码如下所示: x = lambda a : a + 20 print(x(10)) 如果你运行以上代码...然后,我们可以在 print 函数中像这样定义 x 和 y: print(a(10, 50)) 整个代码如下所示: a = lambda x, y : x * y print(a(10, 50)) 运行以上代码...当然,如果我们想要创建一个将在代码中反复使用的函数,我们不会选择 Lambda 函数。但是对于那些只使用一次的函数,Lambda 是不二之选。为什么会这样?...这就是,我的朋友们,Python 中 Lambda 函数的简介。这些小巧的东西非常方便,甚至可以使你的代码更简洁。

    11110

    30分钟学会用Python编写简单程序

    你已经知道信息可以使用Python的内置函数print在屏幕上显示。到目前为止,我们已经看了几个例子,但我还没有详细解释打印功能。...第一个表示print语句可以包含函数名print,后面带上带括号的表达式序列,用逗号分隔。模板中的尖括号符号()用于表示由Python代码的其他片段填充的“槽”。...在这个例子中,我只是对以前的值加1。记住,变量的值可以改变,这就是为什么它们被称为变量的原因。 有时,将变量看作计算机内存中的一种命名的存储位置是有帮助的,我们可以在其中放入一个值。...图2 x=x+ 1的(Python)视图,变量就像便签 顺便说一句,即使赋值语句不直接导致变量的旧值被擦除和覆盖,你也不必担心计算机内存中充满“被丢弃”的值。...Python的for循环具有以下一般形式: forin: 循环体可以是任意Python语句序列。循环体的范围通过它在循环头(for in :部分)下面的缩进来表示。

    3.9K100

    Python 工匠:异常处理的三个好习惯

    如果你旁边刚好有一台安装了 Python 的电脑,那么你可以试着跑一遍上面的脚本。你会发现,上面的代码是不能成功执行的。...随着时间推移,项目也变得越来越庞大,抛出 APIErrorCode 的地方也越来越多。有一天,我正准备复用一个底层图片处理函数时,突然碰到了一个问题。...那时我需要写一个在后台运行的批处理图片脚本,而它刚好可以复用 process_image函数所实现的功能。...上下文管理器是一种配合 with 语句使用的特殊 Python 对象,通过它,可以让异常处理工作变得更方便。 那么,如何利用上下文管理器来改善我们的异常处理流程呢?让我们直接看代码吧。...模块 contextlib 也提供了非常多与编写上下文管理器相关的工具函数与样例。 总结 在这篇文章中,我分享了与异常处理相关的三个建议。

    60740

    Python 工匠: 异常处理的三个好习惯

    如果你旁边刚好有一台安装了 Python 的电脑,那么你可以试着跑一遍上面的脚本。你会发现,上面的代码是不能成功执行的。...随着时间推移,项目也变得越来越庞大,抛出 APIErrorCode 的地方也越来越多。有一天,我正准备复用一个底层图片处理函数时,突然碰到了一个问题。...那时我需要写一个在后台运行的批处理图片脚本,而它刚好可以复用 process_image 函数所实现的功能。...上下文管理器是一种配合 with 语句使用的特殊 Python 对象,通过它,可以让异常处理工作变得更方便。 那么,如何利用上下文管理器来改善我们的异常处理流程呢?让我们直接看代码吧。...模块 contextlib 也提供了非常多与编写上下文管理器相关的工具函数与样例。 总结 在这篇文章中,我分享了与异常处理相关的三个建议。

    90430

    Python 密码破解指南:5~9

    for循环的目的略有不同,它没有像while循环那样的条件。相反,它在一个字符串或一组值上循环。图 5-1 显示了一个for回路的六个部分。...您可以有零个或一个但不是多个else语句,并且else语句总是最后一个,因为它只在没有一个条件求值为True时执行。具有True条件的第一条语句执行其块。...myKey = 8 def语句意味着你正在创建,或者说定义一个你可以在程序中稍后调用的新函数。def语句后的代码块是调用函数时将运行的代码。...他们不需要知道encryptMessage()中的代码实际上是如何做到这一点的,这类似于你如何知道当你将一个字符串传递给print()时,它将打印该字符串,即使你从未见过print()函数的代码。...一个函数中的局部变量也与另一个函数中的局部变量分开,即使它们同名。 列表值可以存储多个其他值,包括其他列表值。许多可以在字符串上使用的操作(比如索引、切片和使用len()函数)也可以在列表上使用。

    2.3K50

    Python 面试中的必考问题

    extendList 的定义可以作如下修改。尽管,创建一个新的列表,没有特定的列表参数。 下面这段代码可能能够产生想要的结果。...为什么在改变 parent.x 的同时也改变了 child2.x 的值?但与此同时没有改变 Child1.x 的值? 此答案的关键是,在 Python 中,类变量在内部是以字典的形式进行传递。...因此,在父类中设定 x = 1,让变量 x 类(带有值 1)能够在其类和其子类中被引用到。这就是为什么第一个打印语句输出结果是 1 1 1。...from future import division 同时要注意的是,//操作符将总是执行整形除法,不管操作符的类型。这就是为什么即使在 Python 2 中 5.0//2.0 的结果是 2.0。...给定以下字典的子类: class DefaultDict(dict): def __missing__(self, key): return [] 下面的代码能够运行么?为什么?

    59830

    笨办法学 Java(二)

    转换告诉编译器“我知道 x 是一个 double,我试图将它的值存储到一个不能保存小数的int中。但我不在乎。你为什么不假装 x 的值是一个整数呢?如果你不得不舍弃小数点后的所有内容,也没关系。”...实际上,你可以说while循环会执行其主体中的所有代码,只要在检查时条件为真。 最终,当检查条件时,条件将为假。然后while循环将跳过其主体中的所有代码,程序的其余部分将继续。...它在屏幕上打印字符串"There."。 10 这是我充满谎言的事情之一。从技术上讲,Java 甚至没有函数。它只有“方法”,这是一个方法,而不是函数。...因此,尽管从技术上讲是不正确的,我将这种事情称为函数,并且只使用方法这个词。 当我做出的东西实际上像一个方法时。...这样我们基本上运行了相同的代码块五次,但用不同的变量替换 每次掷骰子。这为我们节省了很多代码。 为了对比,我还写了一个简化的两个骰子版本的练习,而不使用函数。

    17310

    Python 面试中8个必考问题

    extendList的定义可以作如下修改。尽管,创建一个新的列表,没有特定的列表参数。 下面这段代码可能能够产生想要的结果。...为什么在改变parent.x 的同时也改变了 child2.x 的值?但与此同时没有改变 Child1.x 的值? 此答案的关键是,在 Python 中,类变量在内部是以字典的形式进行传递。...因此,在父类中设定 x = 1,让变量 x 类(带有值1)能够在其类和其子类中被引用到。这就是为什么第一个打印语句输出结果是1 1 1。...from future import division 同时要注意的是,//操作符将总是执行整形除法,不管操作符的类型。这就是为什么即使在Python 2中5.0//2.0的结果是2.0。...Q8、给定以下字典的子类: class DefaultDict(dict): def __missing__(self, key): return [] 下面的代码能够运行么?为什么?

    89190

    Python快速学习第七天

    实际上,property函数可以用0、1、3或者4个参数来调用。如果没有参数,产生的属性既不可读,也不可写。如果只使用一个参数调用(一个取值方法),产生的属性是只读的。...实际上,property函数不是一个真正的函数,它是其实例拥有很多特殊方法的类,也正是那些方法完成了所有的工作。涉及的方法是__get__、__set__和__delete__。...在早期的版本中没有得到支持也是一个原因。但即使看不到两者在当前代码中的大量应用,也不要忽视静态方法和类成员方法的应用(比如工厂函数),可以好好地考虑一下使用新技术。...它在yield运行处引发一个GeneratorExit异常,所以如果需要在生成器内进行代码清理的话,则可以将yield语句放在try/finally语句中。...这样一来,程序从前面的皇后得到了包含位置信息的元组,并且要为后面的皇后提供当前皇后的每种合法的位置信息。为了让程序继续运行下去,接下来需要做的就是把当前的位置信息添加到元组中并传给后面的皇后。

    2.3K50

    你应该知道的编程基本原理

    解释它们的简单方法是,如果一个条件为真,则运行一段代码,而如果条件为假,则运行另一段代码。...else: print("I don't know you.") 上面的条件是 if name == “Jack”:。如果为真,则运行第一个 print 语句。...如果条件为假,则运行第二个语句。条件是编程中非常重要的部分,它可以创建更复杂的代码。 创造力 你可能会疑惑为什么我在这个列表中包含创造力。事实是,创造力对于软件开发绝对至关重要。...一个有创造力的人总是能够看到一个问题的多种解决方案,并且可以应用其中任何一个来找出最佳解决方案。不要犹豫,发挥你的创造力。...选择 - 代码基于条件执行。 迭代(循环) - 可以重复执行语句,直到满足条件。 函数 函数是一个代码单元,旨在执行特定任务。

    15510

    扫码

    添加站长 进交流群

    领取专属 10元无门槛券

    手把手带您无忧上云

    扫码加入开发者社群

    相关资讯

    热门标签

    活动推荐

      运营活动

      活动名称
      广告关闭
      领券