Python 30 天 – 第 6 天 – 循环 II 和函数

作者 : 慕源网 本文共4127个字,预计阅读时间需要11分钟 发布时间: 2021-10-11 共377人阅读

编写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!!')     

但是 while 循环很酷。它们容易编写且容易阅读。我们只需要告诉解释器什么时候停止循环。它可以通过使用 break 语句停止循环执行并中断循环或通过使条件为 false 来停止执行来完成。

hungry = True 
while(hungry): 
   print('Give me something to eat!!') 
   break # prints only once and stops the loop execution     
  
       
hungry = True satisfaction = 0 
while(satisfaction < 10):
 satisfaction += 1
 print('Give me something to eat!!') # prints 10 times  
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     
需要注意的是,如果在while块中使用了break语句,则else块不会被执行。

 

While 与 For 循环

 

当知道需要循环的iterable的范围时,For循环通常很有用。然而,当我们想多次执行某项任务而事先不知道范围时,while循环就可以派上用场。

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

除了break语句,还有另外两个语句continue,它不是跳出循环而是继续迭代。pass 不常用,但有时用作占位符以在循环后继续执行语句。

快速编码练习

让我们在电子邮件列表中找到重复的电子邮件并打印出来。

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)   

这就是我解决问题的方法。请在评论中告诉我您将如何解决它。好吧!是时候切换到一个有趣的话题了,函数。

Functions

函数是一个非常重要的概念,它们存在于所有编程语言中。函数允许我们定义一个动作(代码块),然后按照 DRY 的原则重复执行任意次数的动作。到目前为止,我一直在使用 Python 提供的一些内置函数,例如 print、input、len 等。是时候创建一个了。

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   

Arguments 和 Parameters

上面的函数有点酷,但它也有一些限制。它只能执行相同的操作。让我们让它更具可扩展性,并通过向它传递一些数据来让它随意执行操作

def blower(name, emoji): # parameters   
  print(f'{name} {emoji} {emoji} {emoji}') 
blower('fire', '?') # arguments blower('water', '?')  

在定义一个函数时,当我们向它提供一些数据以根据该数据执行某些操作时,提供的数据称为parameter。一个函数可以提供任意数量的参数。

当调用或调用相同的函数来执行操作时,它接受数据作为参数。这只是一个术语,但它经常混淆和互换使用。

由于positional parameterspositional arguments的顺序或位置很重要,因此上述也称为positional parameters 或 positional arguments
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  

return

return 是 Python 中的一个关键字,用于从函数返回值。为了使函数更有用,它需要根据对表达式的评估返回一些值。如果未指定 return 语句或 return 语句的表达式不计算为数据类型,则该函数返回 None。在 JavaScript 世界中,这个 None 可以链接到 void。

return 语句终止函数并退出它。

def multiplier(num1, num2):   
  return num1 * num2   
result = multiplier(2,3)   
print(result) # 6     

是时候使用 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     

好极了!我刚刚验证了 Python 中也有闭包的概念,就像在 JavaScript 中一样。它在创建工厂函数方面非常有效。在上面的代码块中,我能够创建一个通用函数 add_10 并将动态参数传递给它以生成不同的结果。多么酷啊!

下周将在学习 Python 中的函数式编程概念时探讨更多相关内容。

方法只是在对象内部定义的函数,或者换句话说,它们由对象“owned”。使用对象名称后跟 . 运算符来执行或调用它们。

文档字符串

在编写自定义函数时,如果提及该函数的目标将非常有帮助,以便其他同事或代码用户可以在使用它们时轻松了解该函数的作用。IDE 将显示该函数的信息。此外,还有一些辅助函数和方法可以查看有关函数的信息(如果存在)。

“代码告诉你怎么做;评论告诉你为什么。”

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

*args 是参数的缩写形式,**kwargs 代表关键字参数。当函数需要接受任意数量的参数或关键字参数时使用这些。

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      

在 JavaScript 世界中,ES6 的其余参数用于提取传递给函数的所有参数。创建了另一个心智模型!

作用域

作用域简单来说就是“我可以访问哪些变量?”。这是解释器在阅读代码以查找变量范围时提出的问题。在 Python 中,变量具有函数作用域,这意味着在函数内部定义的变量不能在函数外部访问。

num = 1   
def confusing_function():  
 num = 10  
 return num  
 print(num) # 1 => Global Scope  

print(confusing_function()) # 10 => Local Scope  

这些是 Python 解释器遵循的范围规则,

  • 从本地开始。变量存在吗?然后取值。如果没有,则继续
  • 变量是否在父函数局部作用域中定义?如果存在则获取值,否则继续
  • 变量是否存在于全局范围内?如果存在则获取值,否则继续
  • 变量是内置函数吗?取值否则退出

这就是今天的内容。我现在已经能够涵盖大部分 Python 基础知识。现在是深入研究高级主题的时候了,但在此之前,我想探索和设置开发人员环境以及明天可用的所有不同类型的工具和程序,以完成第一周的路线图。

我希望我试着用通俗易懂的语言来解释我的语言学习过程。如果您觉得有些困惑,或者您有任何其他建议和想法,请在评论中告诉我。

这篇文章是 30 部分挑战系列的一部分。如果你还没有查看以前的帖子,他们在这里,


慕源网 » Python 30 天 – 第 6 天 – 循环 II 和函数

常见问题FAQ

程序仅供学习研究,请勿用于非法用途,不得违反国家法律,否则后果自负,一切法律责任与本站无关。
请仔细阅读以上条款再购买,拍下即代表同意条款并遵守约定,谢谢大家支持理解!

发表评论

开通VIP 享更多特权,建议使用QQ登录