首页 > 编程语言 >Python函数(函数定义、函数调用)用法详解

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

时间:2022-10-17 21:36:17浏览次数:70  
标签:函数 Python max 函数调用 len str 定义

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

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

举个例子,前面学习了 len() 函数,通过它我们可以直接获得一个字符串的长度。我们不妨设想一下,如果没有 len() 函数,要想获取一个字符串的长度,该如何实现呢?请看下面的代码:

  1. n=0
  2. for c in "http://c.biancheng.net/python/":
  3. n = n + 1
  4. print(n)
程序执行结果为:

30

要知道,获取一个字符串长度是常用的功能,一个程序中就可能用到很多次,如果每次都写这样一段重复的代码,不但费时费力、容易出错,而且交给别人时也很麻烦。

所以 Python 提供了一个功能,即允许我们将常用的代码以固定的格式封装(包装)成一个独立的模块,只要知道这个模块的名字就可以重复使用它,这个模块就叫做函数(Function)。

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

其实,函数的本质就是一段有特定功能、可以重复使用的代码,这段代码已经被提前编写好了,并且为其起一个“好听”的名字。在后续编写程序过程中,如果需要同样的功能,直接通过起好的名字就可以调用这段代码。

下面演示了如何将我们自己实现的 len() 函数封装成一个函数:
  1. #自定义 len() 函数
  2. def my_len(str):
  3. length = 0
  4. for c in str:
  5. length = length + 1
  6. return length
  7. #调用自定义的 my_len() 函数
  8. length = my_len("http://c.biancheng.net/python/")
  9. print(length)
  10. #再次调用 my_len() 函数
  11. length = my_len("http://c.biancheng.net/shell/")
  12. print(length)
程序执行结果为:

30
29


如果读者接触过其他编程语言中的函数,以上对于函数的描述,肯定不会陌生。但需要注意的一点是,和其他编程语言中函数相同的是,Python 函数支持接收多个( ≥0 )参数,不同之处在于,Python 函数还支持返回多个( ≥0 )值。

比如,上面程序中,我们自己封装的 my_len(str) 函数,在定义此函数时,我们为其设置了 1 个 str 参数,同时该函数经过内部处理,会返回给我们 1 个 length 值。

通过分析 my_len() 函数这个实例不难看出,函数的使用大致分为 2 步,分别是定义函数和调用函数。接下来一一为读者进行详细的讲解。

Python函数的定义

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

def 函数名(参数列表):
    //实现特定功能的多行代码
    [return [返回值]]

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

此格式中,各部分参数的含义如下:
  • 函数名:其实就是一个符合 Python 语法的标识符,但不建议读者使用 a、b、c 这类简单的标识符作为函数名,函数名最好能够体现出该函数的功能(如上面的 my_len,即表示我们自定义的 len() 函数)。
  • 形参列表:设置该函数可以接收多少个参数,多个参数之间用逗号( , )分隔。
  • [return [返回值] ]:整体作为函数的可选参参数,用于设置该函数的返回值。也就是说,一个函数,可以用返回值,也可以没有返回值,是否需要根据实际情况而定。

注意,在创建函数时,即使函数不需要参数,也必须保留一对空的“()”,否则 Python 解释器将提示“invaild syntax”错误。另外,如果想定义一个没有任何功能的空函数,可以使用 pass 语句作为占位符。

例如,下面定义了 2 个函数:
  1. #定义个空函数,没有实际意义
  2. def pass_dis():
  3. pass
  4. #定义一个比较字符串大小的函数
  5. def str_max(str1,str2):
  6. str = str1 if str1 > str2 else str2
  7. return str

虽然 Python 语言允许定义个空函数,但空函数本身并没有实际意义。


另外值得一提的是,函数中的 return 语句可以直接返回一个表达式的值,例如修改上面的 str_max() 函数:
  1. def str_max(str1,str2):
  2. return str1 if str1 > str2 else str2
该函数的功能,和上面的 str_max() 函数是完全一样的,只是省略了创建 str 变量,因此函数代码更加简洁。

Python函数的调用

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

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

[返回值] = 函数名([形参值])

其中,函数名即指的是要调用的函数的名称;形参值指的是当初创建函数时要求传入的各个形参的值。如果该函数有返回值,我们可以通过一个变量来接收该值,当然也可以不接受。

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

例如,我们可以调用上面创建的 pass_dis() 和 str_max() 函数:
  1. pass_dis()
  2. strmax = str_max("http://c.biancheng.net/python","http://c.biancheng.net/shell");
  3. print(strmax)
首先,对于调用空函数来说,由于函数本身并不包含任何有价值的执行代码,也没有返回值,应该调用空函数不会有任何效果。

其次,对于上面程序中调用 str_max() 函数,由于当初定义该函数为其设置了 2 个参数,因此这里在调用该参数,就必须传入 2 个参数。同时,由于该函数内部还使用了 return 语句,因此我们可以使用 strmax 变量来接收该函数的返回值。

因此,程序执行结果为:

http://c.biancheng.net/shell

为函数提供说明文档

前面章节讲过,通过调用 Python 的 help() 内置函数或者 __doc__ 属性,我们可以查看某个函数的使用说明文档。事实上,无论是 Python 提供给我们的函数,还是自定义的函数,其说明文档都需要设计该函数的程序员自己编写。

其实,函数的说明文档,本质就是一段字符串,只不过作为说明文档,字符串的放置位置是有讲究的,函数的说明文档通常位于函数内部、所有代码的最前面。

以上面程序中的 str_max() 函数为例,下面演示了如何为其设置说明文档:
  1. #定义一个比较字符串大小的函数
  2. def str_max(str1,str2):
  3. '''
  4. 比较 2 个字符串的大小
  5. '''
  6. str = str1 if str1 > str2 else str2
  7. return str
  8. help(str_max)
  9. #print(str_max.__doc__)
程序执行结果为:

Help on function str_max in module __main__:

str_max(str1, str2)
    比较 2 个字符串的大小

上面程序中,还可以使用 __doc__ 属性来获取 str_max() 函数的说明文档,即使用最后一行的输出语句,其输出结果为:

 
    比较 2 个字符串的大小
   

标签:函数,Python,max,函数调用,len,str,定义
From: https://www.cnblogs.com/qlsh/p/16800761.html

相关文章

  • C++ 虚函数表
    C++类在内存中的存储方式C++内存分为5个区域:堆heap:由new分配的内存块,其释放编译器不去管,由程序员自己控制。如果程序员没有释放掉,在程序结束时系统会自动回收。......
  • 什么是面向对象,Python面向对象(一切皆对象)
    读者肯定听过 Python 中“一切皆对象”的说法,但可能并不了解它的具体含义,只是在学习的时候听说Python是面向对象的编程语言,本节将向大家详细介绍Python面向对象的含......
  • Python pass语句及其作用
    在实际开发中,有时候我们会先搭建起程序的整体逻辑结构,但是暂时不去实现某些细节,而是在这些地方加一些注释,方面以后再添加代码,请看下面的例子:age=int(input("请输入你......
  • Python if语句嵌套(入门必读)
    前面章节中,详细介绍了3种形式的条件语句,即if、ifelse和ifelifelse,这3种条件语句之间可以相互嵌套。例如,在最简单的if语句中嵌套ifelse语句,形式如下:if表达......
  • Python assert断言函数及用法
    Python assert语句,又称断言语句,可以看做是功能缩小版的if语句,它用于判断某个表达式的值,如果值为真,则程序可以继续往下执行;反之,Python解释器会报AssertionError错误......
  • Python while循环语句详解
    Python 中,while循环和if条件分支语句类似,即在条件(表达式)为真的情况下,会执行相应的代码块。不同之处在于,只要条件为真,while就会一直重复执行那段代码块。while语句的......
  • Python for循环及用法详解
    Python 中的循环语句有2种,分别是while循环和for循环,前面章节已经对while做了详细的讲解,本节给大家介绍for循环,它常用于遍历字符串、列表、元组、字典、集合等序......
  • Python循环结构中else用法(入门必读)
    Python 中,无论是while循环还是for循环,其后都可以紧跟着一个else代码块,它的作用是当循环条件为False跳出循环时,程序会最先执行else代码块中的代码。以while循......
  • Python len()函数详解:获取字符串长度或字节数
    Python 中,要想知道一个字符串有多少个字符(获得字符串长度),或者一个字符串占用多少个字节,可以使用len函数。len函数的基本语法格式为:len(string)其中string用于指定要......
  • Python join()方法:合并字符串
    join()方法也是非常重要的字符串方法,它是split()方法的逆方法,用来将列表(或元组)中包含的多个字符串连接成一个字符串。想详细了解split()方法的读者,可阅读《Pythonsp......