Python-功能函数的使用

介绍

Python中的函数提供了有组织的,可重用的代码来执行一组操作。函数简化了编码过程,防止冗余逻辑,并使代码更容易遵循。

定义和调用简单函数

使用def语句来定义Python中的函数最常见的方式。这种说法是所谓的单条复合语句的语法如下:

def function_name(parameters):
    statement(s)

function_name 被称为标识符的功能。由于函数定义是一个可执行语句其执行绑定功能名称可以在以后使用的标识符被称为函数对象。

parameters 是一个可选的标识符列表,绑定到调用函数时作为参数提供的值。函数可以具有任意数量的参数,这些参数由逗号分隔。

statement(s)-也被称为函数体 -是每个函数被调用时执行的语句的一个非空序列。这意味着一个函数体不能为空。

这里有一个简单的函数定义,目的是打印的一个例子Hello每次被称为时间:

def greet():
    print("Hello")

现在,让我们把定义的greet()函数:

greet()
# Out: Hello

这是一个函数定义的另一个例子,它接受一个参数,并在每次调用函数时显示传入的值:

def greet_two(greeting):
    print(greeting)

在此之后,greet_two()功能必须与参数调用:

greet_two("Howdy")
# Out: Howdy

也可以给该函数参数一个默认值:

def greet_two(greeting="Howdy"):
    print(greeting)

现在可以调用该函数而不给出值:

greet_two()
# Out: Howdy

您会注意到,与许多其他语言不同,您不需要显式声明函数的返回类型。Python函数可以通过返回任何类型的值return关键字。一个函数可以返回任意数量的不同类型!

def many_types(x):
    if x < 0:
        return "Hello!"
    else:
        return 0

print many_types(1)
print many_types(-1)

# Output:
0
Hello!

只要调用者正确地处理它,这是完全有效的Python代码。

到达执行结束没有return语句的函数总是返回None

def do_nothing():
    pass

print(do_nothing())
# Out: None

如前所述,函数定义必须有一个函数体,一个非空的语句序列。因此,pass语句作为函数体,这是一个空操作-当执行它,什么都不会发生。当语句需要语句时,它作为占位符是有用的,但是不需要执行代码。

用任意数量的参数定义函数

位置参数的任意数量:

定义一个能够获取任意数量的参数的函数可以通过在参数前面加上一个参数来完成 *

def func(*args):
    # args will be a tuple containing all values that are passed in
    for i in args:
        print(i)

func(1, 2, 3)  # Calling it with 3 arguments
# Out: 1
#      2
#      3

list_of_arg_values = [1, 2, 3]
func(*list_of_arg_values)  # Calling it with list of values, * expands the list
# Out: 1
#      2
#      3 

func()  # Calling it without arguments
# No Output 

不能提供一个默认的args,例如func(*args=[1, 2, 3])将引发一个语法错误(甚至不会编译)。

不能调用函数时,例如通过名称提供这些func(*args=[1, 2, 3])会提高一个TypeError

但是,如果你已经有了你的论点在数组(或其他Iterable),你可以调用你的功能如下:func(*my_stuff)

这些参数(*args)可以通过索引访问,例如args[0]将返回第一个参数

关键字参数的任意数目

您可以通过定义在定义的参数取一个名字参数任意数量2 *在它的面前:

def func(**kwargs):
    # kwargs will be a dictionary containing the names as keys and the values as values
    for name, value in kwargs.items():
        print(name, value)

func(value1=1, value2=2, value3=3)   # Calling it with 3 arguments
# Out: value2 2
#      value1 1
#      value3 3

func()                               # Calling it without arguments
# No Out put

my_dict = {‘foo‘: 1, ‘bar‘: 2}
func(**my_dict)                      # Calling it with a dictionary
# Out: foo 1
#      bar 2

不能提供这些没有名字,例如func(1, 2, 3)将引发一个TypeError

kwargs是一个普通的本地python字典。例如,args[‘value1‘]将给予参数的值value1。请务必先确认是否有这样的说法或KeyError将提高。

警告

您可以将这些与其他可选和必需的参数混合,但在定义内的顺序很重要。

位置/关键字参数放在第一位。(必需参数)。
然后是任意 *arg参数。(可选的)。
那么只有关键字的论据来下一个。(需要)。
最后,任意关键字 **kwargs来了。(可选的)。

#       |-positional-|-optional-|---keyword-only--|-optional-|
def func(arg1, arg2=10 , *args, kwarg1, kwarg2=2, **kwargs):
     pass
  • arg1必须给予,否则一个TypeError上升。它可以给出作为位置(func(10))或关键字参数(func(arg1=10))。
  • kwarg1也必须给予,但它只能作为关键字参数来提供:func(kwarg1=10)
  • arg2kwarg2是可选的。如果该值要更改的相同的规则arg1(无论是位置还是关键字)和kwarg1(仅限于关键字)适用。
  • *args捕获额外的位置参数。但是注意,arg1arg2必须作为位置参数传递参数提供*argsfunc(1, 1, 1, 1)
  • **kwargs捕捉所有其他关键字参数。在这种情况下,即没有任何参数arg1arg2kwarg1kwarg2。例如:func(kwarg3=10)
  • 在Python 3,你可以使用*单独指示所有后续参数必须指定为关键字。比如math.isclose在Python 3.5的功能和更高的使用规定def math.isclose (a, b, *, rel_tol=1e-09, abs_tol=0.0),这意味着前两个参数可以在位置上提供,但可选的第三个和第四个参数只能作为关键字参数提供。

Python 2.x不支持仅关键字的参数。这种行为可以被效仿kwargs

def func(arg1, arg2=10, **kwargs):
    try:
        kwarg1 = kwargs.pop("kwarg1")
    except KeyError:
        raise TypeError("missing required keyword-only argument: ‘kwarg1‘")

    kwarg2 = kwargs.pop("kwarg2", 2)
    # function body ...

有关命名的注意事项

命名可选位置参数的约定args和可选关键字参数kwargs只是你一个约定可以使用任何你喜欢的名字,但它是遵循惯例有用的,让其他人知道你在做什么,甚至自己以后所以请不要。

注意唯一性

任何功能可以与被定义没有或者一个 *args无或一种 **kwargs,但不与每一个以上。还*args 必须是最后一个位置参数,并**kwargs必须是最后一个参数。试图使用的任一个以上的导致一个语法错误异常。

有关可选参数的嵌套函数的注意事项

这是可以嵌套这样的功能和一般的惯例是删除代码已处理的项目,但如果你是传承的参数需要传递一个可选的位置ARGS *前缀和可选关键字ARGS一个**前缀,否则ARGS可以作为列表或元组传递,并将kwargs作为单个字典传递。例如:

def fn(**kwargs):
    print (kwargs)
    f1(**kwargs)

def f1(**kwargs):
    print(len(kwargs))

fn(a=1, b=2)
# Out:
# {‘a‘: 1, ‘b‘: 2}
# 2
时间: 2024-12-13 12:01:58

Python-功能函数的使用的相关文章

Python常用功能函数

Python常用功能函数汇总 1.按行写字符串到文件中 import sys, os, time, json def saveContext(filename,*name): format = '^' context = name[0] for i in name[1:]: context = context + format + str(i) context = str(context).replace('(','(').replace(')',')').replace(',',',').re

Python 的函数

Python 函数: 函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段. 函数能提高应用的模块性,和代码的重复利用率.你已经知道Python提供了许多内建函数,比如print().但你也可以自己创建函数,这被叫做用户自定义函数. 定义一个函数: 定义一个由自己想要功能的函数,以下是简单的规则: 函数代码块以 def 关键词开头,后接函数标识符名称和圆括号 (). 任何传入参数和自变量必须放在圆括号中间,圆括号之间可以用于定义参数. 函数的第一行语句可以选择性地使用文档字符串-用于

python之函数的参数

定义函数的时候,我们把参数的名字和位置确定下来,函数的接口定义就完成了.对于函数的调用者来说,只需要知道如何传递正确的参数,以及函数将返回什么样的值就够了,函数内部的复杂逻辑被封装起来,调用者无需了解. Python的函数定义非常简单,但灵活度却非常大.除了正常定义的必选参数外,还可以使用默认参数.可变参数和关键字参数,使得函数定义出来的接口,不但能处理复杂的参数,还可以简化调用者的代码. 位置参数 我们先写一个计算x2的函数: def power(x): return x * x 对于powe

python的函数

一 函数是什么? 函数一词来源于数学,但编程中的「函数」概念,与数学中的函数是有很大不同的,具体区别,我们后面会讲,编程中的函数在英文中也有很多不同的叫法.在BASIC中叫做subroutine(子过程或子程序),在Pascal中叫做procedure(过程)和function,在C中只有function,在Java里面叫做method. 函数能提高应用的模块性,和代码的重复利用率.你已经知道Python提供了许多内建函数,比如print().但你也可以自己创建函数,这被叫做用户自定义函数. 定

python基础-函数_递归_内置函数

一 数学定义的函数与python中的函数 二 为何使用函数 背景提要 三 函数和过程 四 函数参数 五 局部变量与全局变量 六 前向引用之'函数即变量' 七 嵌套函数 八 递归 九 匿名函数 十 函数式编程 十一 内置函数 十二 本节作业 一.数学定义的函数与python中的函数 初中数学函数定义:一般的,在一个变化过程中,如果有两个变量x和y,并且对于x的每一个确定的值,y都有唯一确定的值与其对应,那么我们就把x称为自变量,把y称为因变量,y是x的函数.自变量x的取值范围叫做这个函数的定义域

从C#到Python —— 3 函数及函数编程

在C#中没有独立的函数存在,只有类的(动态或静态)方法这一概念,它指的是类中用于执行计算或其它行为的成员.在Python中,你可以使用类似C#的方式定义类的动态或静态成员方法,因为它与C#一样支持完全的面向对象编程.你也可以用过程式编程的方式来编写Python程序,这时Python中的函数与类可以没有任何关系,类似C语言定义和使用函数的方式.此外,Python还支持函数式编程,虽然它对函数式编程的支持不如LISP等语言那样完备,但适当使用还是可以提高我们工作的效率. 本章主要介绍在过程编程模式下

Python回调函数用法实例详解

本文实例讲述了Python回调函数用法.分享给大家供大家参考.具体分析如下: 一.百度百科上对回调函数的解释: 回调函数就是一个通过函数指针调用的函数.如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用为调用它所指向的函数时,我们就说这是回调函数.回调函数不是由该函数的实现方直接调用,而是在特定的事件或条件发生时由另外的一方调用的,用于对该事件或条件进行响应. 二.什么是回调: 软件模块之间总是存在着一定的接口,从调用方式上,可以把他们分为三类:同步调用.回调和异步调用.同步调用

第七讲 python自定义函数

函数:将功能封装 语法结构 def function_name (参数......) code.... code.... code.... 注意: 1,尾部有冒号 2,不用花括号,但是需使用相同的缩进,如果没有相同缩进,则不作为函数体而是作为主程序 3,自定义函数无返回值类型-------------无类型之说 无形参: def test_a():    print 'hello robin'    print 'www.baidu.com' test_a()-------调用函数(任意地方,不

python学习——函数的参数

定义函数的时候,我们把参数的名字和位置确定下来,函数的接口定义就完成了.对于函数的调用者来说,只需要知道如何传递正确的参数,以及函数将返回什么样的值就够了,函数内部的复杂逻辑被封装起来,调用者无需了解. Python的函数定义非常简单,但灵活度却非常大.除了正常定义的必选参数外,还可以使用默认参数.可变参数和关键字参数,使得函数定义出来的接口,不但能处理复杂的参数,还可以简化调用者的代码. 位置参数 我们先写一个计算x2的函数: def power(x): return x * x 对于powe

Python的&#39;函数指针&#39;的使用

其实Python是不存在指针这一个说法的,更不用说是函数指针了,但是也有相应的处理方式. 我这里使用这一个函数指针,其实也是为了代码的简洁以及扩展性,也就是说还是可以用其他的方式来实现其所需要实现的功能的. 遇到的情况是:有一个Status状态,当其为1的时候,需要执行函数A, 为2的时候需要执行函数B....如果可取的值很多的时候会比较麻烦. 常用的解决方法就是直接if...elif..elif....使用若干个这样的条件语句进行处理(因为Python也没有switch语句.....) 而遇到