python3定义函数_Python3函数

你可以已经知道(了解),Python有类似于 printf()等许多内置函数。但你也可以创建自己的函数。 这些函数被称为:用户自定义函数。

如何定义一个函数

可以定义函数,以提供所需的功能。 下面是一些简单的规则用来定义 Python 中的函数。

函数模块使用 def 关键字开头,后跟函数名以及括号( ( ) ).

任何输入参数或参数都应该放在这些括号内。 还可以定义这些括号内的参数。

函数的第一个语句可以是一个可选的声明 - 函数或文档说明的字符串。

每个函数中的代码块使用冒号(:)开始和缩进。

语句返回[expression]存在于函数中,一个表达式可选地传递给调用者。不带参数的return语句返回None。

语法

def functionname( parameters ):

"function_docstring"

function_suite

return [expression]

默认情况下,参数有一个位置的行为,你需要告知它们定义的相同顺序。

示例

下面的函数接受一个字符串作为输入参数,并打印标准屏幕上。

def printme( str ):

"This prints a passed string into this function"

print (str)

return

如何调用函数

定义一个函数只需要给出它的名称,指定要被包括在函数和结构的代码块中的参数。

当函数的基本结构完成,可以通过从其它函数或直接从Python提示符调用它执行它。下面是一个调用 print()函数的例子 -

#!/usr/bin/python3

# Function definition is here

def printme( str ):

"This prints a passed string into this function"

print (str)

return

# Now you can call printme function

printme("I'm first call to user defined function!")

printme("Again second call to the same function")

当执行上面的代码,它产生以下结果 -

I'm first call to user defined function!

Again second call to the same function

通过引用 VS 值传递

所有参数(参数)在Python语言中是通过引用传递。这意味着,如果在函数中你改变参数的值, 参数的值变动也会反映回调用函数。例如 -

#!/usr/bin/python3

# Function definition is here

def changeme( mylist ):

"This changes a passed list into this function"

print ("Values inside the function before change: ", mylist)

mylist[2]=50

print ("Values inside the function after change: ", mylist)

return

# Now you can call changeme function

mylist = [10,20,30]

changeme( mylist )

print ("Values outside the function: ", mylist)

在这里,我们维持传递的对象参考,并在同一个对象追加值。因此,这将产生以下结果 -

Values inside the function before change: [10, 20, 30]

Values inside the function after change: [10, 20, 50]

Values outside the function: [10, 20, 50]

存在这样的情况:参数正在被引用传递,以及参考被覆盖调用函数里面的一个例子。

#!/usr/bin/python3

# Function definition is here

def changeme( mylist ):

"This changes a passed list into this function"

mylist = [1,2,3,4] # This would assi new reference in mylist

print ("Values inside the function: ", mylist)

return

# Now you can call changeme function

mylist = [10,20,30]

changeme( mylist )

print ("Values outside the function: ", mylist)

参数 mylist 是局部在函数 changeme。在函数中更改mylist 不影响 mylist 的值。函数不会起任何作用,最终这将产生以下结果:

Values inside the function: [1, 2, 3, 4]

Values outside the function: [10, 20, 30]

函数参数

可以通过使用以下类型的形式参数来调用一个函数:

必需参数

关键字参数

默认参数

可变长度参数

必需的参数

必需的参数是传递到到一个函数正确的位置顺序的参数。这里,在函数调用的参数数目应当与函数定义完全匹配。

在调用函数 printme(),肯定需要传递一个参数,否则它给出了一个语法错误如下 -

#!/usr/bin/python3

# Function definition is here

def printme( str ):

"This prints a passed string into this function"

print (str)

return

# Now you can call printme function

printme()

当执行上面的代码,它产生了以下结果:

Traceback (most recent call last):

File "test.py", line 11, in

printme();

TypeError: printme() takes exactly 1 argument (0 given)

关键字参数

关键字参数会关系到函数的调用。当你在一个函数调用中使用关键字参数,调用者是由参数名称标识的参数。

这使您可以跳过参数或顺序,因为Python解释器能够使用提供带参数的值相匹配关键字。您也可以使用关键字调用print()函数在以下几个方面-

#!/usr/bin/python3

# Function definition is here

def printme( str ):

"This prints a passed string into this function"

print (str)

return

# Now you can call printme function

printme( str = "My string")

当执行上面的代码,它产生以下结果 -

My string

下面的例子提供了更多的清晰代码画面。注意,这里参数的顺序并不重要。

#!/usr/bin/python3

# Function definition is here

def printinfo( name, age ):

"This prints a passed info into this function"

print ("Name: ", name)

print ("Age ", age)

return

# Now you can call printinfo function

printinfo( age=50, name="miki" )

当执行上面的代码,它产生以下结果 -

Name: miki

Age 50

默认参数

默认参数是,如果参数不提供一个值,那么函数就会调用这个默认参数。下面的例子给出了默认参数示例,如果没有传递它,它将打印默认的 age 值 -

#!/usr/bin/python3

# Function definition is here

def printinfo( name, age = 35 ):

"This prints a passed info into this function"

print ("Name: ", name)

print ("Age ", age)

return

# Now you can call printinfo function

printinfo( age=50, name="miki" )

printinfo( name="miki" )

当执行上面的代码,它产生以下结果 -

Name: miki

Age 50

Name: miki

Age 35

可变长度参数

您可能需要处理函数在定义函数时指定时更多的参数。 这些参数称为可变长度参数在函数定义时不会被命名,不像必需参数和默认参数。

非关键字可变参数的函数语法是这样的 -

def functionname([formal_args,] *var_args_tuple ):

"function_docstring"

function_suite

return [expression]

星号(*)放在持有的所有非关键字变量参数值的变量名之前。如果函数调用期间没有指定任何其他参数此元组是空的。下面是一个简单的例子 -

#!/usr/bin/python3

# Function definition is here

def printinfo( arg1, *vartuple ):

"This prints a variable passed arguments"

print ("Output is: ")

print (arg1)

for var in vartuple:

print (var)

return

# Now you can call printinfo function

printinfo( 10 )

printinfo( 70, 60, 50 )

当执行上面的代码,它产生以下结果 -

Output is:

10

Output is:

70

60

50

匿名函数

这些函数被称为匿名,因为它们不是通过使用def关键字标准方式的声明。您可以使用lambda关键字创建小的匿名函数。

lambda形式可以使用任何数量的参数,但在表现形式上只返回一个值。 它们不能包含命令或多个表达式。

匿名函数不能直接调用打印,因为lambda需要表达式。

lambda函数都有自己的命名空间,并且不能访问除了在其参数列表和在全局命名空间中的其他变量。

尽管似乎 lambda 是一个函数的单行版,它们不等同于C或C++的内联声明,它的目的是调用出于性能考虑,在传递函数由堆栈分配。

语法

lambda函数的语法只包含一个声明,如下 -

lambda [arg1 [,arg2,.....argn]]:expression

以下是显示 lambda形式函数如何工作的例子-

#!/usr/bin/python3

# Function definition is here

sum = lambda arg1, arg2: arg1 + arg2

# Now you can call sum as a function

print ("Value of total : ", sum( 10, 20 ))

print ("Value of total : ", sum( 20, 20 ))

当执行上面的代码,它产生以下结果 -

Value of total : 30

Value of total : 40

return语句

该语句返回[expression] 存在一个函数,一个表达式可选地传递给调用者。不带参数的return语句一样返回None。

所有上述实施例不返回任何值。您可以从一个函数返回一个值如下 -

#!/usr/bin/python3

# Function definition is here

def sum( arg1, arg2 ):

# Add both the parameters and return them."

total = arg1 + arg2

print ("Inside the function : ", total)

return total

# Now you can call sum function

total = sum( 10, 20 )

print ("Outside the function : ", total )

当执行上面的代码,它产生以下结果 -

Inside the function : 30

Outside the function : 30

变量范围

程序中的所有变量可能不会在该程序中的所有位置都可以进行访问。这取决于这个变量在哪里声明。

变量的作用域确定了程序,可以访问特定标识的部分。有很多的 Python 变量两种基本范围 -

全局变量

局部变量

全局与局部变量

被一个函数体中定义的变量有一个局部范围,之外定义那些具有全局范围。

这意味着,局部变量只能在声明它们的函数内部访问,而全局变量在整个程序中通过函数体内进行访问。当你调用一个函数,其内部声明的变量也有一个作用域。下面是一个简单的例子 -

#!/usr/bin/python3

total = 0 # This is global variable.

# Function definition is here

def sum( arg1, arg2 ):

# Add both the parameters and return them."

total = arg1 + arg2; # Here total is local variable.

print ("Inside the function local total : ", total)

return total

# Now you can call sum function

sum( 10, 20 )

print ("Outside the function global total : ", total )

当执行上面的代码,它产生以下结果 -

Inside the function local total : 30

Outside the function global total : 0

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值