练习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_work\4_python\2_code_python\02_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("\n")
    print("当你运行(或者调用)一个函数时,检查以下事项:")
    print("1 你是通过输入函数名称来运行/调用/使用一个函数的吗?")
    print("2 你运行的时候有在名称后面加 ( 吗?")
    print("3 你有把你想要的值放在圆括号里并用逗号隔开吗?")
    print("4 你是以 ) 来结束调用这个函数的吗?")
    
checklist()

(2)执行结果

PS E:\3_work\4_python\2_code_python\02_LearnPythonTheHardWay> python checklist.py
1 你是否用def来创建函数了?
2 你的函数名是只包含字母和 _ (下划线)吗?
3 你在函数名后面放( (左圆括号)了吗?
4 你在左圆括号后面放参数(argument)了吗?参数之间是以逗号隔开的吗?
5 你的每个参数是唯一的吗(即没有重名)?
6 你在参数后面放 ) (右圆括号)和 : (冒号)了吗?
7 你在与这个函数相关的代码行前面加上四个空格的缩进了吗?(不能多也不能少)
8 你是通过另起一行不缩进来结束你的函数的吗?

当你运行(或者调用)一个函数时,检查以下事项:
1 你是通过输入函数名称来运行/调用/使用一个函数的吗?
2 你运行的时候有在名称后面加 ( 吗?
3 你有把你想要的值放在圆括号里并用逗号隔开吗?
4 你是以 ) 来结束调用这个函数的吗?
posted @ 2020-07-04 01:13  洛兰123  阅读(144)  评论(0编辑  收藏  举报