zoukankan      html  css  js  c++  java
  • 练习18--名称、变量、代码、函数

    一 函数

    1 功能

    • 它们给代码片段命名,就跟“变量”给字符串和数字命名一样。
    • 它们可以接受参数,就跟你的脚本接受 argv 一样。
    • 通过使用 #1 和 #2,它们可以让你创建“微型脚本”或者“小命令”。

    2 定义:函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。

    3 定义规则:

    • 函数代码块以 def 关键词开头,后接函数标识符名称和圆括号()
    • 任何传入参数和自变量必须放在圆括号中间。圆括号之间可以用于定义参数。
    • 函数的第一行语句可以选择性地使用文档字符串—用于存放函数说明。
    • 函数内容以冒号起始,并且缩进。
    • return [表达式]
      • 作用:返回函数中全部逻辑的执行结果并结束函数的执行
      • 返回值存在以下情况:
        • 没有显式定义,返回None
        • 定义了一个返回值,返回定义的值
        • 定义了多个函数返回值,返回一个以所有返回值为元素的元组
      • 最后,函数的返回值可以是任意对象,字符串、函数等均可以作为函数的返回值。

    4 语法:

    def functionname( parameters ):
       "函数_文档字符串"
       function_suite
       return [expression]

    5 使用函数的好处

    • 提高代码的重用性,避免代码的重复冗余
    • 保持一致性,相同的过程执行相同的逻辑
    • 可扩展性好,函数中的代码块可根据需要灵活扩展
    • 可维护性高,一旦需要改变逻辑时只需要修改函数中的代码块,一处修改后调用的地方都同步更新

    二 练习代码

    1 ex18.py

    (1)代码内容:

    # this one is like your scripts with argv
    def print_two(*args):
        arg1,arg2 = args
        print(f"arg1:{arg1},arg2:{arg2}")
        
    # ok,that *args is actually pointless,we can just do this
    def print_two_again(arg1,arg2):
        print(f"arg1:{arg1},arg2:{arg2}")
            
    # this just takes one argument
    def print_one(arg1):
        print(f"arg1:{arg1}")
            
    # this one takes no arguments
    def print_none():
        print("I got nothing.")
            
    print_two("Zed","Shaw")
    print_two_again("Zed","Shaw")
    print_one("First!")
    print_none()

    (2)代码讲解:

    • 让我们把第一个函数拆解一下, print_two 这是你从创建脚本中已经学到的最熟悉的东西:
    1. 首先,我们告诉 Python 我们想要用 def (即 define)来创建一个函数。
    2. 在 def 的同一行我们给了函数一个名字,本例中是 print_two ,但是你也可以起名叫“peanuts”(花生),名字没关系,不过最好简短一些,并且能够说明这个函数的作用。
    3.  然后我们告诉它我们想要 *args ,它很像参数 args ,只不过是为函数设的,必须放在括号里面才能工作。
    4.  然后我们以 : 结束这一行,另起一行开始缩进。
    5.  在 : 之后缩进四个空格的所有行都是关于 print_two 这个函数名的。我们第一个缩进的行就是用来解包这个参数(argument),跟之前的脚本一样。
    6. 要表明它是如何工作的,我们把这些参数打印了出来,就像我们在脚本中所做的一样。
    • print_two 的问题是它不是创建一个函数最简单的方法。在 python 里面,我们可以跳过整个解包参数的过程,只用我们需要的 () 里面的名字即可,这也正是 print_two_again的事情。之后我们用一个参数创建了 print_one 这个函数。最后我们创建了一个没有参数的函数 print_none 。
    • *args 中的 *是什么作用? 这是告诉 Python 取所有的参数给函数,然后把它们放在 args 里放成一列,很像你之前学的 argv ,只不过这个是为函数设置的。这种不常用,除非有特殊需要。
     

    (3)运行结果:

    PS E:3_work4_python2_code_python2_LearnPythonTheHardWay> python ex18.py
    arg1:Zed,arg2:Shaw
    arg1:Zed,arg2:Shaw
    arg1:First!
    I got nothing.

    2 checklist.py

    (1)代码内容

    def checklist(*args):
        print("1 你是否用def来创建函数了?")
        print("2 你的函数名是只包含字母和 _ (下划线)吗?")
        print("3 你在函数名后面放( (左圆括号)了吗?")
        print("4 你在左圆括号后面放参数(argument)了吗?参数之间是以逗号隔开的吗?")
        print("5 你的每个参数是唯一的吗(即没有重名)?")
        print("6 你在参数后面放 ) (右圆括号)和 : (冒号)了吗?")
        print("7 你在与这个函数相关的代码行前面加上四个空格的缩进了吗?(不能多也不能少)")
        print("8 你是通过另起一行不缩进来结束你的函数的吗?")
        print("
    ")
        print("当你运行(或者调用)一个函数时,检查以下事项:")
        print("1 你是通过输入函数名称来运行/调用/使用一个函数的吗?")
        print("2 你运行的时候有在名称后面加 ( 吗?")
        print("3 你有把你想要的值放在圆括号里并用逗号隔开吗?")
        print("4 你是以 ) 来结束调用这个函数的吗?")
        
    checklist()

    (2)执行结果

    PS E:3_work4_python2_code_python2_LearnPythonTheHardWay> python checklist.py
    1 你是否用def来创建函数了?
    2 你的函数名是只包含字母和 _ (下划线)吗?
    3 你在函数名后面放( (左圆括号)了吗?
    4 你在左圆括号后面放参数(argument)了吗?参数之间是以逗号隔开的吗?
    5 你的每个参数是唯一的吗(即没有重名)?
    6 你在参数后面放 ) (右圆括号)和 : (冒号)了吗?
    7 你在与这个函数相关的代码行前面加上四个空格的缩进了吗?(不能多也不能少)
    8 你是通过另起一行不缩进来结束你的函数的吗?
    
    当你运行(或者调用)一个函数时,检查以下事项:
    1 你是通过输入函数名称来运行/调用/使用一个函数的吗?
    2 你运行的时候有在名称后面加 ( 吗?
    3 你有把你想要的值放在圆括号里并用逗号隔开吗?
    4 你是以 ) 来结束调用这个函数的吗?
  • 相关阅读:
    js原型链原理看图说话
    this关键字
    ECMAScript 继承机制实现
    Javascript闭包模拟私有成员
    关于javascript中apply()和call()方法的区别
    arguments.callee
    有用的工具函数
    ECMAScript的世界
    JavaScript 技巧与高级特性
    自定义控件不让在界面拖放。
  • 原文地址:https://www.cnblogs.com/luoxun/p/13233483.html
Copyright © 2011-2022 走看看