发布于 2026-01-06 1 阅读
0

30天Python学习计划👨‍💻 - 第6天 - 循环(二)和函数

30天Python学习计划👨‍💻 - 第6天 - 循环(二)和函数

编写 Python 代码的乐趣应该在于看到简洁明了、易于阅读的类,它们用少量清晰的代码表达了大量的功能——而不是冗长乏味、令人昏昏欲睡的代码。——
吉多·范·罗森

从上次中断的地方继续,我一边摆弄代码一边探索循环。然后,我开始学习编程中最重要的概念之一:函数。我详细学习了Python中的函数和方法、文档字符串、最佳实践以及作用域。我会尽力用清晰简洁的语言进行解释。

循环继续

while循环

while 循环是另一种根据特定条件多次运行代码块的方法。使用 while 循环时需要格外小心,避免意外创建无限循环,导致系统崩溃!

hungry = True
while(hungry): # This is always true so it keeps printing until system crashes!
  print('Give me something to eat!!')
Enter fullscreen mode Exit fullscreen mode

但是 while 循环很棒。它们编写简单,易于阅读。我们只需要告诉解释器何时停止循环。这可以通过使用一个break语句来停止循环执行并跳出循环来实现。另一种方法是将条件设为假来停止执行。

hungry = True
while(hungry):
    print('Give me something to eat!!')
    break # prints only once and stops the loop execution
Enter fullscreen mode Exit fullscreen mode
hungry = True
satisfaction = 0
while(satisfaction < 10):
  satisfaction += 1
  print('Give me something to eat!!') # prints 10 times
Enter fullscreen mode Exit fullscreen mode

循环的另一个特点while是它可以与else代码块结合使用。

hungry = True
satisfaction = 0
while satisfaction < 10:
  satisfaction += 1
  print('Give me something to eat!!')
else:
    print('I am super satisfied now') # gets printed once condition is falsy
Enter fullscreen mode Exit fullscreen mode

需要注意的是,如果break在 while 代码块中使用了该语句,则该else代码块不会执行。

while 循环与 for 循环

当已知需要循环遍历的对象范围时,for 循环通常很有用。而当需要多次执行某个任务但事先不知道范围时,while 循环则非常有用。

while True:
  response_from_user = input('Enter some message. Enter bye to exit')
  if(response_from_user == 'bye'):
    break
Enter fullscreen mode Exit fullscreen mode

除了上述break语句之外,还有两条语句,continue它们不会跳出循环,而是继续执行循环。这种写法pass并不常用,但有时会用作占位符,以便在循环结束后继续执行语句。
这个 Stack Overflow 帖子对此有很好的解释。

快速编码练习

让我们找出邮件列表中的重复邮件地址并打印出来。

email_list = ['roger@hey.com','michael@hey.com','roger@hey.com','prince@gmail.com']
duplicate_emails = []
for email in email_list:
  if email_list.count(email) > 1 and email not in duplicate_emails:
    duplicate_emails.append(email)
print(duplicate_emails)
Enter fullscreen mode Exit fullscreen mode

这就是我解决问题的方法。请在评论区告诉我你会如何解决。好了!是时候换个有趣的话题,函数了

函数

函数是一个非常重要的概念,所有编程语言都包含函数。函数允许我们定义一个动作(代码块),然后根据 DRY 原则,多次执行该动作而无需重复编写代码。到目前为止,我一直在使用 Python 提供的一些内置函数,例如print`__getitem__` input、` len__getitem__` 等。现在是时候创建自己的函数了。

def blow_fire(): # This part is called function definition
  print('fire 🔥 🔥 🔥')

blow_fire() # This part is called function invocation
blow_fire() # It can be called any number to times to perform some action
Enter fullscreen mode Exit fullscreen mode

参数和参数

上面的函数挺酷的,但也有一些局限性。它只能执行相同的操作。让我们让它更具扩展性,通过传递一些数据,让它能够执行任意操作。

def blower(name, emoji): # parameters
  print(f'{name} {emoji} {emoji} {emoji}')

blower('fire', '🔥') # arguments
blower('water', '🌊')
Enter fullscreen mode Exit fullscreen mode

定义函数时,当我们向函数提供一些数据以使其根据这些数据执行某些操作时,提供的数据称为参数。一个函数可以接受任意数量的参数。

当调用同一个函数来执行操作时,它会接受数据作为参数。这只是术语上的差异,但常常令人困惑,而且经常被混用。

上述内容也称为位置参数位置实参,因为参数或实参的顺序或位置很重要。

def blower(name = 'fire', emoji = '🔥'): # default parameters
  print(f'{name} {emoji} {emoji} {emoji}')

blower('fire', '🔥') # arguments
blower('water', '🌊')
blower() # fire 🔥 # this works as the function has default parameters defined
Enter fullscreen mode Exit fullscreen mode

返回

return`return` 是 Python 中的一个关键字,用于从函数返回一个值。为了使函数更有用,它需要根据表达式的求值结果返回一个值。如果没有指定 `return` 语句,或者 `return` 语句的表达式求值结果不是数据类型,则函数返回 `None` None。在 JavaScript 中,这None可以与 `.` 关联起来void

return语句终止函数并退出。

def multiplier(num1, num2):
  return num1 * num2

result = multiplier(2,3)
print(result) # 6
Enter fullscreen mode Exit fullscreen mode

是时候利用这个return语句做点酷的事情了。

def sum(num1):
  def child(num2):
    return num1 + num2
  return child

add_10 = sum(10)
print(add_10(20)) # 30  (Closure!!!)
print(add_10(50)) # 60
print(add_10(100)) # 110
Enter fullscreen mode Exit fullscreen mode

太棒了!我刚刚验证了Python 和 JavaScript 一样,也有闭包的概念。它在创建工厂函数方面非常有效。在上面的代码块中,我创建了一个名为`add_10`的通用函数,并向其传递动态参数,从而生成不同的结果。是不是很酷!

下周学习Python函数式编程概念时,我会更深入地探讨这个问题。

方法本质上是定义在对象内部的函数,或者说,它们“归对象所有”。.调用方法时,需要使用对象名后跟运算符。

文档字符串

编写自定义函数时,最好明确说明函数的目标,这样其他同事或代码用户在使用时就能轻松理解函数的功能。集成开发环境 (IDE) 会显示函数的相关信息。此外,如果存在辅助函数或方法,也可以通过它们来查看函数的相关信息。

“代码告诉你怎么做;注释告诉你为什么。”
——杰夫·阿特伍德(笔名“代码恐怖”)

def test_function():
  '''
  This function just prints test to the console.
  '''
  print('test')

test_function()
Enter fullscreen mode Exit fullscreen mode

“代码更多的是被阅读而不是被编写。”
——吉多·范·罗森

https://www.programiz.com/python-programming/docstrings

*args 和 **kwargs

*args 是 arguments 的缩写,**kwargs 代表 keyword arguments。当函数需要接受任意数量的参数或关键字参数时,就需要用到它们。

def powerful_function(*args):
  print(args)

powerful_function(1,3,2) # (1, 3, 2) --> Returns a tuple

def super_function(**kwargs):
  print(kwargs)

super_function(name='John', age='45') # {'name': 'John', 'age': '45'} --> Returns a dict
Enter fullscreen mode Exit fullscreen mode

https://www.programiz.com/python-programming/args-and-kwargs

在 JavaScript 世界中,ES6 的剩余参数用于提取传递给函数的所有参数。又一个思维模型诞生了!

范围

简单来说,作用域指的是“我可以访问哪些变量?”。解释器在读取代码以确定变量作用域时,就会提出这类问题。在 Python 中,变量具有函数 作用域,这意味着在函数内部定义的变量无法在函数外部访问。

num = 1
def confusing_function():
    num = 10
    return num

print(num) # 1 => Global Scope
print(confusing_function()) # 10 => Local Scope
Enter fullscreen mode Exit fullscreen mode

以下是Python解释器遵循的作用域规则:

  • 首先检查本地变量是否存在。如果存在,则获取其值。如果不存在,则继续执行后续步骤。
  • 变量是否在父函数的局部作用域中定义?如果存在,则获取其值;否则,继续执行后续步骤。
  • 变量是否存在于全局作用域中?如果存在,则获取其值;否则,继续执行后续步骤。
  • 该变量是否为内置函数?如果是,则获取其值;否则,退出。

阅读更多关于 Python 作用域的内容

这篇关于射程的文章也很棒。

今天就到这里。我已经讲解了大部分 Python 基础知识。现在是时候深入学习一些高级主题了,但在此之前,我想明天先搭建一下开发环境,并了解一下各种可用的工具和程序,以完成第一周的学习计划。

我希望我用浅显易懂的语言解释了我的语言学习过程。如果您觉得哪里不清楚,或者有任何其他建议或想法,请在评论区告诉我。

祝你一切顺利!

文章来源:https://dev.to/arindamdawn/30-days-of-python-day-6-3ghp