Python函数(函数定义、函数调用)用法详解

Python 中,函数的应用非常广泛,前面章节中我们已经接触过多个函数,比如 input() 、print()、range()、len() 函数等等,这些都是 Python 的内置函数,可以直接使用。

除了可以直接使用的内置函数外,Python 还支持自定义函数,即将一段有规律的、可重复使用的代码定义成函数,从而达到一次编写、多次调用的目的。

比如,在程序中定义了一段代码,这段代码用于实现一个特定的功能。问题来了,如果下次需要实现同样的功能,难道要把前面定义的代码复制一次?如果这样做实在太傻了,这意味着每次当程序需要实现该功能时,都要将前面定义的代码复制一次。正确的做法是,将实现特定功能的代码定义成一个函数,每次当程序需要实现该功能时,只要执行(调用)该函数即可。

通俗来讲,所谓函数,就是指为一段实现特定功能的代码“取”一个名字,以后即可通过该名字来执行(调用)该函数。使用函数,可以大大提高代码的重复利用率。

通常,函数可以接收零个或多个参数,也可以返回零个或多个值。从函数使用者的角度来看,函数就像一个“黑匣子”,程序将零个或多个参数传入这个“黑匣子”,该“黑匣子”经过一番计算即可返回零个或多个值。

对于“黑匣子”的内部细节(就是函数的内部实现细节),函数的使用者并不需要关心。就像前面在调用 len()、max()、min() 等函数时,我们只负责传入参数、接收返回值,至于函数内部的实现细节,我们并不关心。

如图 1 所示为函数调用示意图:


图 1 函数调用示意图

从函数定义者(实现函数的人)的角度来看,其至少需要想清楚以下 3 点:

  1. 函数需要几个关键的需要动态变化的数据,这些数据应该被定义成函数的参数。
  2. 函数需要传出几个重要的数据(就是调用该函数的人希望得到的数据),这些数据应该被定义成返回值。
  3. 函数的内部实现过程。

不难看出,定义函数比调用函数要难得多,而本节正是教你如何定义函数的。不过不用担心,对于实现过程复杂的函数,定义本身就很费力,有时候实现不出来也完全正常。

Python函数的定义

定义函数,也就是创建一个函数,可以理解为创建一个具有某些用途的工具。定义函数需要用 def 关键字实现,具体的语法格式如下:

def 函数名(形参列表):
    //由零条到多条可执行语句组成的代码块
    [return [返回值]]

其中,用 [] 括起来的为可选择部分,即可以使用,也可以省略。

此格式中,各部分参数的含义如下:

    • 函数名:从语法角度来看,函数名只要是一个合法的标识符即可;从程序的可读性角度来看,函数名应该由一个或多个有意义的单词连缀而成,每个单词的字母全部小写,单词与单词之间使用下画线分隔。
    • 形参列表:用于定义该函数可以接收的参数。形参列表由多个形参名组成,多个形参名之间以英文逗号(,)隔开。一旦在定义函数时指定了形参列表,调用该函数时就必须传入相应的参数值,也就是说,谁调用函数谁负责为形参赋值。
    • 注意,在创建函数时,即使函数不需要参数,也必须保留一对空的“()”,否则 Python 解释器将提示“invaild syntax”错误。另外,如果想定义一个没有任何功能的空函数,可以使用 pass 语句作为占位符。
    • 下面程序定义了两个函数:
      1. def my_max(x, y) :
      2. # 定义一个变量z,该变量等于x、y中较大的值
      3. z = x if x > y else y
      4. # 返回变量z的值
      5. return z
      6. # 定义一个函数,声明一个形参
      7. def say_hi(name) :
      8. print("===正在执行say_hi()函数===")
      9. return name + ",您好!"

      Python函数的调用

      调用函数也就是执行函数。如果把创建的函数理解为一个具有某种用途的工具,那么调用函数就相当于使用该工具。

      函数调用的基本语法格式如下所示:

      函数名([形参值])

      其中,函数名即指的是要调用的函数的名称;形参值指的是当初创建函数时要求传入的各个形参的值。需要注意的是,创建函数有多少个形参,那么调用时就需要传入多少个值,且顺序必须和创建函数时一致。即便该函数没有参数,函数名后的小括号也不能省略。

      例如,调用前面创建的那 2 个函数,执行代码如下:

      1. a = 6
      2. b = 9
      3. # 调用my_max()函数,将函数返回值赋值给result变量
      4. result = my_max(a , b) # ①
      5. print("result:", result)
      6. # 调用say_hi()函数,直接输出函数的返回值
      7. print(say_hi("孙悟空")) # ②

      上面程序中,分别在 ① 号、② 号代码处调用了 my_max() 和 say_hi() 这两个函数。从下面的运行结果可以看出,当程序调用一个函数时,既可以把调用函数的返回值赋值给指定变量,也可以将函数的返回值传给另一个函数,作为另一个函数的参数。

      运行上面程序,将可以看到如下运行结果:

      result: 9
      ===正在执行say_hi()函数===
      孙悟空,您好!

      另外,在函数体中使用 return 语句可以显式地返回一个值,return 语句返回的值既可是有值的变量,也可是一个表达式。例如上面的 my_max() 函数,实际上也可简写为如下形式:

      1. def my_max(x, y) :
      2. # 返回一个表达式
      3. return x if x > y else y

      为函数提供说明文档

      前面介绍过可以使用 Python 内置的 help() 函数查看其他函数的帮助文档,我们也经常通过 help() 函数查看指定函数的帮助信息,这对于 Python 开发者来说非常重要。

      我们还可以为函数编写说明文档,只要把一段字符串放在函数声明之后、函数体之前,这段字符串将被作为函数的部分,这个文档就是函数的说明文档。

      程序既可通过 help() 函数查看函数的说明文档,也可通过函数的 __doc__ 属性访问函数的说明文档。下面程序示范了为函数编写说明文档:

      1. def my_max(x, y) :
      2. ‘‘‘
      3. 获取两个数值之间较大数的函数。
      4. my_max(x, y)
      5. 返回x、y两个参数之间较大的那个
      6. ‘‘‘
      7. # 定义一个变量z,该变量等于x、y中较大的值
      8. z = x if x > y else y
      9. # 返回变量z的值
      10. return z

      上面程序使用多行字符串的语法为 my_max() 函数编写了说明文档,接下来程序既可通过 help() 函数查看该函数的说明文档,也可通过 __doc__ 属性访问该函数的说明文档。

      1. # 使用help()函数查看my_max的帮助文档
      2. help(my_max)
      3. #或者 print(my_max.__doc__)

      运行上面代码,可以看到如下运行结果:

      Help on function my_max in module __main__:

      my_max(x, y)
          获取两个数值之间较大数的函数。
         
          my_max(x, y)
              返回x、y两个参数之间较大的那个。

原文地址:https://www.cnblogs.com/qq991025/p/11625393.html

时间: 2024-08-28 23:05:58

Python函数(函数定义、函数调用)用法详解的相关文章

python处理word文件:win32com用法详解

目标:用python处理doc文件 方法:引入win32com模块 ************************************************************************** 一.安装 ************************************************************************** 首先要先下载安装win32com模块(起先在linux下装不成功,后在windows下面成功了...) 下载地址:http

python linecache模块读取文件用法详解

linecache模块允许从任何文件里得到任何的行,并且使用缓存进行优化,常见的情况是从单个文件读取多行. linecache.getlines(filename) 从名为filename的文件中得到全部内容,输出为列表格式,以文件每行为列表中的一个元素,并以linenum-1为元素在列表中的位置存储 linecache.getline(filename,lineno) 从名为filename的文件中得到第lineno行.这个函数从不会抛出一个异常–产生错误时它将返回”(换行符将包含在找到的行里

python中os.walk的用法详解

python中os.walk是一个简单易用的文件.目录遍历器,可以帮助我们高效的处理文件.目录方面的事情. 1.载入要使用os.walk,首先要载入该函数 可以使用以下两种方法 import os from os import walk 2.使用 os.walk的函数声明为: walk(top, topdown=True, οnerrοr=None, followlinks=False) 参数 top 是你所要便利的目录的地址 topdown 为真,则优先遍历top目录,否则优先遍历top的子目

python基础:\r的用法详解

1 import sys 2 import time 3 print("ab\rcd\ref") 4 5 for i in range(65,91): 6 s="\r{name:s}".format(name=chr(i)) 7 time.sleep(0.5) 8 sys.stdout.write(s) 第一个print输出: ef 第二个输出: A变到Z(没有换行,每次都是一个字母显示,下一个字母替换上一个字母) \r 默认表示将输出的内容返回到第一个指针,这样的

oracle trim函数用法详解

在oracle数据库中,trim一般都是用在删除字符串两边的空格.实际上,trim也可以用来删除字符串两边的指定字符.并且trim指定删除的字符串只能是单个字符Oracle TRIM函数是很常见的函数,下面对Oracle TRIM函数的语法作了详尽的阐述说明,希望可以让您对Oracle TRIM函数有更深的认识. 如果提到Oracle TRIM函数,最简单的功能就是使用它来去除字符串的行首和行尾的空格,这个功能也是大家使用频率最高的一种.然而Oracle TRIM函数其实是具有删除“任意指定”字

wp_list_categories函数用法详解

本以为写完新手教程之后,可以不写新手应用方面的文章了的,可今天又有朋友在群里问如何显示每个分类下文章数量这个基础性问题,看来Wordpress中文化还有很长的一段路要走,我们任重而道远啊!好,解决你的问题先:正如标题所说,Wordpress是用wp_list_categories这个函数来显示分类的,其用法是:< ?php wp_list_categories('arguments'); ?>arguments即参数,默认参数设置为: $defaults = array('show_optio

setAttribute()函数的用法详解

setAttribute()函数的用法详解:在动态创建元素设置元素的属性的时候setAttribute()函数用处很大,它可以动态的设置元素的属性,下面介绍一下它的用法.语法结构: setAttribute(name, value) 1).name表示要设置的属性.2).value表示属性值.代码实例如下: <!DOCTYPE html> <html> <head> <meta charset=" utf-8"> <meta nam

setInterval()函数用法详解

setInterval()函数用法详解:此函数用途相当广泛,在滚动代码或者焦点图片等等效果中都有应用,下面就通过实例简单介绍一下此函数的用法.setInterval()函数可以规定在按照指定的周期来执行一段函数,也就是说每隔一定事件就开始执行一次指定的函数.语法如下: setInterval(code,interval) 此函数具有两个参数,第一个参数规定要执行的函数,第二个参数规定函数两次执行之间的间隔,单位是毫秒(1秒=1000毫秒).代码实例如下: <!DOCTYPE HTML> <

eval()函数用法详解

eval()函数用法详解:此函数可能使用的频率并不是太高,但是在某些情况下具有很大的作用,下面就介绍一下eval()函数的用法.语法结构: eval(str) 此函数可以接受一个字符串str作为参数,并把此str当做一段javascript代码去执行,如果str执行结果是一个值则返回此值,否则返回undefined.如果参数不是一个字符串,则直接返回该参数,实例如下: eval("var a=1");//声明一个变量a并赋值1. eval("2+3");//执行加运

LayoutInflater的inflate函数用法详解

LayoutInflater的inflate函数用法详解 LayoutInflater作用是将layout的xml布局文件实例化为View类对象. 获取LayoutInflater的方法有如下三种: ? LayoutInflater inflater=(LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); View layout = inflater.inflate(R.layout.main, nul