企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
# Python 函数 > 原文: [https://thepythonguru.com/python-functions/](https://thepythonguru.com/python-functions/) * * * 于 2020 年 1 月 7 日更新 * * * 函数是可重用的代码段,可帮助我们组织代码的结构。 我们创建函数,以便我们可以在程序中多次运行一组语句,而无需重复自己。 ## 创建函数 * * * Python 使用`def`关键字启动函数,以下是语法: ```py def function_name(arg1, arg2, arg3, .... argN):      #statement inside function ``` **注意**: 函数内的所有语句均应使用相等的空格缩进。 函数可以接受零个或多个括在括号中的参数(也称为参数)。 您也可以使用`pass`关键字来省略函数的主体,如下所示: ```py def myfunc():     pass ``` 让我们来看一个例子。 ```py def sum(start, end):    result = 0    for i in range(start, end + 1):        result += i    print(result) sum(10, 50) ``` **预期输出**: ```py 1230 ``` 上面我们定义了一个名为`sum()`的函数,它具有两个参数`start`和`end`。 该函数计算从`start`到`end`开始的所有数字的总和。 ## 具有返回值的函数。 * * * 上面的函数只是将结果打印到控制台,如果我们想将结果分配给变量以进行进一步处理怎么办? 然后,我们需要使用`return`语句。 `return`语句将结果发送回调用方并退出该函数。 ```py def sum(start, end):    result = 0    for i in range(start, end + 1):        result += i    return result s = sum(10, 50) print(s) ``` **预期输出**: ```py 1230 ``` 在这里,我们使用`return`语句返回数字总和并将其分配给变量`s`。 您也可以使用`return`陈述式而没有返回值。 ```py def sum(start, end): if(start > end): print("start should be less than end") return # here we are not returning any value so a special value None is returned    result = 0    for i in range(start, end + 1):        result += i    return result s = sum(110, 50) print(s) ``` **预期输出**: ```py start should be less than end None ``` 在 python 中,如果您未从函数显式返回值,则始终会返回特殊值`None`。 让我们举个例子: ```py def test():   # test function with only one statement     i = 100 print(test()) ``` **预期输出**: ```py None ``` 如您所见,`test()`函数没有显式返回任何值,因此返回了`None`。 ## 全局变量与局部变量 * * * **全局变量**:未绑定到任何函数但可以在函数内部和外部访问的变量称为全局变量。 **局部变量**:在函数内部声明的变量称为局部变量。 让我们看一些例子来说明这一点。 **示例 1** : ```py global_var = 12 # a global variable def func():     local_var = 100 # this is local variable     print(global_var) # you can access global variables in side function func()   # calling function func() #print(local_var)     # you can't access local_var outside the function, because as soon as function ends local_var is destroyed ``` **预期输出**: ```py 12 ``` **示例 2**: ```py xy = 100 def cool():     xy = 200 # xy inside the function is totally different from xy outside the function     print(xy) # this will print local xy variable i.e 200 cool() print(xy) # this will print global xy variable i.e 100 ``` **预期输出**: ```py 200 100 ``` 您可以使用`global`关键字后跟逗号分隔的变量名称(`,`)在全局范围内绑定局部变量。 ```py t = 1 def increment(): global t # now t inside the function is same as t outside the function t = t + 1 print(t) # Displays 2 increment() print(t) # Displays 2 ``` **预期输出**: ```py 2 2 ``` 请注意,在全局声明变量时不能为变量赋值。 ```py t = 1 def increment(): #global t = 1 # this is error global t t = 100 # this is okay t = t + 1 print(t) # Displays 101 increment() print(t) # Displays 101 ``` **预期输出**: ```py 101 101 ``` 实际上,无需在函数外部声明全局变量。 您可以在函数内部全局声明它们。 ```py def foo(): global x # x is declared as global so it is available outside the function x = 100 foo() print(x) ``` **预期输出**: 100 ## 具有默认值的参数 * * * 要指定参数的默认值,您只需要使用赋值运算符分配一个值。 ```py def func(i, j = 100):     print(i, j) ``` 以上函数具有两个参数`i`和`j`。 参数`j`的默认值为`100`,这意味着我们可以在调用函数时忽略`j`的值。 ```py func(2) # here no value is passed to j, so default value will be used ``` **预期输出**: ```py 2 100 ``` 再次调用`func()`函数,但这一次为`j`参数提供一个值。 ```py func(2, 300) # here 300 is passed as a value of j, so default value will not be used ``` **预期输出**: ```py 2 300 ``` ## 关键字参数 * * * 有两种方法可以将参数传递给方法:位置参数和关键字参数。 在上一节中,我们已经看到了位置参数的工作方式。 在本节中,我们将学习关键字参数。 关键字参数允许您使用像`name=value`这样的名称值对来传递每个参数。 让我们举个例子: ```py def named_args(name, greeting):     print(greeting + " " + name ) ``` ```py named_args(name='jim', greeting='Hello') named_args(greeting='Hello', name='jim') # you can pass arguments this way too ``` **期望值**: ```py Hello jim Hello jim ``` ## 混合位置和关键字参数 * * * 可以混合使用位置参数和关键字参数,但是对于此位置参数必须出现在任何关键字参数之前。 我们来看一个例子。 ```py def my_func(a, b, c):     print(a, b, c) ``` 您可以通过以下方式调用上述函数。 ```py # using positional arguments only my_func(12, 13, 14) # here first argument is passed as positional arguments while other two as keyword argument my_func(12, b=13, c=14) # same as above my_func(12, c=13, b=14) # this is wrong as positional argument must appear before any keyword argument # my_func(12, b=13, 14) ``` **预期输出**: ```py 12 13 14 12 13 14 12 14 13 ``` ## 从函数返回多个值 * * * 我们可以使用`return`语句从函数中返回多个值,方法是用逗号(`,`)分隔它们。 多个值作为元组返回。 ```py def bigger(a, b):     if a > b:         return a, b     else:         return b, a s = bigger(12, 100) print(s) print(type(s)) ``` **预期输出**: ```py (100, 12) <class 'tuple'> ``` 在下一篇文章中,我们将学习 [Python 循环](/python-loops/) * * * * * *