有人能帮我理解Zed Shaw';让我们用艰苦的方式学习Python 3

有人能帮我理解Zed Shaw';让我们用艰苦的方式学习Python 3,python,Python,我试图破译Zed的ex23,他的解释有些帮助,但我迷路了。这本剧本讲述的是他试图教你如何用不同的语言对字母进行解码和编码。其中一些话题似乎还为时过早/他还没有讨论过,他提到这比我见过的任何东西都要困难,但我一直在迷失方向。我会试着根据我所看到的解释我能解释什么,但我不确定我是否理解这里的一切 import sys script, input_encoding, error = sys.argv 这很简单,我们只是导入sys并定义argv的变量 def main(language_file, e

我试图破译Zed的ex23,他的解释有些帮助,但我迷路了。这本剧本讲述的是他试图教你如何用不同的语言对字母进行解码和编码。其中一些话题似乎还为时过早/他还没有讨论过,他提到这比我见过的任何东西都要困难,但我一直在迷失方向。我会试着根据我所看到的解释我能解释什么,但我不确定我是否理解这里的一切

import sys script, input_encoding, error = sys.argv
这很简单,我们只是导入sys并定义argv的变量

def main(language_file, encoding, errors):
    line = language_file.readline() 
用三个变量定义名为main的函数。定义行以从语言文件中读取该行。如何定义语言_文件?我哪里都看不到定义

if line:
    print_line(line, encoding, errors)  
    return main(language_file, encoding, errors)
如果行中有定义为的内容,则它将运行以下命令。如果它没有(也就是说如果它是假的),那么它就不会。如果不在上面定义函数,如何创建if语句?有什么我不知道的吗。Zed在下面定义了打印行,但在上面使用了它?返回主页做什么?这是否意味着我们返回到基函数

def print_line(line, encoding, errors):
    next_lang = line.strip()  
    raw_bytes = next_lang.encode(encoding,
                                 errors=errors)
我们在这里定义打印线。strip函数的作用是什么?错误=错误意味着什么

 cooked_string = raw_bytes.decode(encoding, errors=errors) 
我们定义为获取原始字节并对其进行编码的字符串…我想

    print(raw_bytes, "<==>", cooked_string)


languages = open("languages.txt", encoding = "utf - 8")
我认为这本书中的练习有点过早,或者我只是没有看到一些东西。如果有人能帮助我们剖析这一点,我们将不胜感激

这是完整的纸条,没有我的评论:

def main(language_file, encoding, errors):
    line = language_file.readline() #defining line as a read off of language_file


    if line: # if line has something from what it is defined to be it will run the below. If it does not (AKA if it's false), then it won't.
        print_line(line, encoding, errors)  
        return main(language_file, encoding, errors)

def print_line(line, encoding, errors):
    next_lang = line.strip()  # what is strip?
    raw_bytes = next_lang.encode(encoding, errors=errors) 
    cooked_string = raw_bytes.decode(encoding, errors=errors) 

    print(raw_bytes, "<==>", cooked_string)


languages = open("languages.txt", encoding = "utf - 8")

main(languages, input_encoding, error)
def main(语言文件、编码、错误):
line=language_file.readline()#将行定义为语言_文件的读取
if line:#如果line具有定义为的内容,它将运行以下命令。如果它没有(也就是说如果它是假的),那么它就不会。
打印行(行、编码、错误)
返回main(语言文件、编码、错误)
def打印行(行、编码、错误):
next_lang=line.strip()#strip是什么?
原始字节=下一个语言编码(编码,错误=错误)
煮熟的字符串=原始字节。解码(编码,错误=错误)
打印(原始字节、“、熟字符串)
languages=open(“languages.txt”,encoding=“utf-8”)
主(语言、输入编码、错误)

我将尝试按顺序回答您的问题:

  • 如何定义语言_文件<代码>语言_文件被定义为主函数的参数。在下面调用main时传入。它是在
    languages=open(“languages.txt”,encoding=“utf-8”)
    行中打开的文件
  • 如果不在上面定义函数,如何创建if语句?这很棘手。。。Python是一种解释语言,这意味着它在运行时读取代码、运行代码并将Python代码与机器代码交互。由于
    printline
    函数是在调用
    main
    函数的上方定义的,因此它可以正常工作。考虑函数的定义位置和运行位置
  • 返回main(语言文件、编码、错误)
    行递归调用main函数。这意味着它将读取文件的下一行,直到没有更多的行,然后它将停止执行
  • strip函数删除字符串开头和结尾的空白
  • 函数定义中的
    errors=errors
    设置默认参数。这意味着,当您只传递一个参数而不是两个参数时,设置errors=errors。错误在上面的import语句中定义。请参阅geeks for geeks教程,了解处理python函数参数的不同方法
  • 这两条线:
  • 第一行使用指定的编码创建字符串
    next_lang
    的字节表示字符串。第二行将其解码为python字符串。有关字符串的utf-8编码表,请参阅。utf-8只是一种编码选项。有许多不同的方法将字符串编码为字节

  • 为什么是语言vs语言文件?语言是打开文件句柄后存储该句柄的变量。然后将语言作为参数传递给主函数。主函数的第一个参数名为“language_file”,因此在主函数期间,它本质上是将language重命名为language_file
  • def main(language_file, encoding, errors):
        line = language_file.readline() #defining line as a read off of language_file
    
    
        if line: # if line has something from what it is defined to be it will run the below. If it does not (AKA if it's false), then it won't.
            print_line(line, encoding, errors)  
            return main(language_file, encoding, errors)
    
    def print_line(line, encoding, errors):
        next_lang = line.strip()  # what is strip?
        raw_bytes = next_lang.encode(encoding, errors=errors) 
        cooked_string = raw_bytes.decode(encoding, errors=errors) 
    
        print(raw_bytes, "<==>", cooked_string)
    
    
    languages = open("languages.txt", encoding = "utf - 8")
    
    main(languages, input_encoding, error)
    
    raw_bytes = next_lang.encode(encoding, errors=errors) 
    cooked_string = raw_bytes.decode(encoding, errors=errors)