Python自定义函数的创建、调用和函数的参数详解

 更新时间:2014年03月11日 17:28:13   作者:  
这篇文章主要介绍了Python自定义函数的创建、调用和函数的参数、变量作用域等常见问题,需要的朋友可以参考下

函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。
函数能提高应用的模块性,和代码的重复利用率。你已经知道Python提供了许多内建函数,比如print()。但你也可以自己创见函数,这被叫做用户自定义函数。
一、定义一个函数
你可以定义一个由自己想要功能的函数,以下是简单的规则:

1.函数代码块以def关键词开头,后接函数标识符名称和圆括号()。
2.任何传入参数和自变量必须放在圆括号中间。圆括号之间可以用于定义参数。
3.函数的第一行语句可以选择性地使用文档字符串—用于存放函数说明。
4.函数内容以冒号起始,并且缩进。
5.Return[expression]结束函数,选择性地返回一个值给调用方。不带表达式的return相当于返回 None。

语法

复制代码 代码如下:
def functionname( parameters ):
   "函数_文档字符串"
   function_suite
   return [expression]

默认情况下,参数值和参数名称是按函数声明中定义的的顺序匹配起来的。

实例

以下为一个简单的Python函数,它将一个字符串作为传入参数,再打印到标准显示设备上。

复制代码 代码如下:
def printme( str ):
   "打印传入的字符串到标准显示设备上"
   print str
   return

二、函数调用
定义一个函数只给了函数一个名称,指定了函数里包含的参数,和代码块结构。这个函数的基本结构完成以后,你可以通过另一个函数调用执行,也可以直接从Python提示符执行。

如下实例调用了printme()函数:

复制代码 代码如下:
#!/usr/bin/python

# Function definition is here
def printme( str ):
   "打印任何传入的字符串"
   print str;
   return;

# Now you can call printme function
printme("我要调用用户自定义函数!");
printme("再次调用同一函数");
#以上实例输出结果:

#我要调用用户自定义函数!
#再次调用同一函数

三、按值传递参数和按引用传递参数
所有参数(自变量)在Python里都是按引用传递。如果你在函数里修改了参数,那么在调用这个函数的函数里,原始的参数也被改变了。例如:

复制代码 代码如下:
#!/usr/bin/python

# 可写函数说明
def changeme( mylist ):
   "修改传入的列表"
   mylist.append([1,2,3,4]);
   print "函数内取值: ", mylist
   return

# 调用changeme函数
mylist = [10,20,30];
changeme( mylist );
print "函数外取值: ", mylist
#传入函数的和在末尾添加新内容的对象用的是同一个引用。故输出结果如下:

#函数内取值:  [10, 20, 30, [1, 2, 3, 4]]
#函数外取值:  [10, 20, 30, [1, 2, 3, 4]]

四、函数的参数
Python函数可以使用的参数类型:

1.必备参数
2.命名参数
3.缺省参数
4.不定长参数

1、必备参数

必备参数须以正确的顺序传入函数。调用时的数量必须和声明时的一样。
调用printme()函数,你必须传入一个参数,不然会出现语法错误:

复制代码 代码如下:
#!/usr/bin/python

#可写函数说明
def printme( str ):
   "打印任何传入的字符串"
   print str;
   return;

#调用printme函数
printme();
#以上实例输出结果:

#Traceback (most recent call last):
#  File "test.py", line 11, in <module>
#    printme();
#TypeError: printme() takes exactly 1 argument (0 given)


2、命名参数

命名参数和函数调用关系紧密,调用方用参数的命名确定传入的参数值。你可以跳过不传的参数或者乱序传参,因为Python解释器能够用参数名匹配参数值。用命名参数调用printme()函数:

复制代码 代码如下:
#!/usr/bin/python

#可写函数说明
def printme( str ):
   "打印任何传入的字符串"
   print str;
   return;

#调用printme函数
printme( str = "My string");
#以上实例输出结果:

#My string


下例能将命名参数顺序不重要展示得更清楚:
复制代码 代码如下:
#!/usr/bin/python

#可写函数说明
def printinfo( name, age ):
   "打印任何传入的字符串"
   print "Name: ", name;
   print "Age ", age;
   return;

#调用printinfo函数
printinfo( age=50, name="miki" );
#以上实例输出结果:

#Name:  miki
#Age  50


3、缺省参数

调用函数时,缺省参数的值如果没有传入,则被认为是默认值。下例会打印默认的age,如果age没有被传入:

复制代码 代码如下:
#!/usr/bin/python

#可写函数说明
def printinfo( name, age = 35 ):
   "打印任何传入的字符串"
   print "Name: ", name;
   print "Age ", age;
   return;

#调用printinfo函数
printinfo( age=50, name="miki" );
printinfo( name="miki" );
#以上实例输出结果:

#Name:  miki
#Age  50
#Name:  miki
#Age  35

4、不定长参数

你可能需要一个函数能处理比当初声明时更多的参数。这些参数叫做不定长参数,和上述2种参数不同,声明时不会命名。基本语法如下:

复制代码 代码如下:
def functionname([formal_args,] *var_args_tuple ):
   "函数_文档字符串"
   function_suite
   return [expression]

加了星号(*)的变量名会存放所有未命名的变量参数。选择不多传参数也可。如下实例:
复制代码 代码如下:
#!/usr/bin/python

# 可写函数说明
def printinfo( arg1, *vartuple ):
   "打印任何传入的参数"
   print "输出: "
   print arg1
   for var in vartuple:
      print var
   return;

# 调用printinfo 函数
printinfo( 10 );
printinfo( 70, 60, 50 );
#以上实例输出结果:

#输出:
#10
#输出:
#70
#60
#50

五、匿名函数
用lambda关键词能创建小型匿名函数。这种函数得名于省略了用def声明函数的标准步骤。

Lambda函数能接收任何数量的参数但只能返回一个表达式的值,同时只能不能包含命令或多个表达式。
匿名函数不能直接调用print,因为lambda需要一个表达式。
lambda函数拥有自己的名字空间,且不能访问自有参数列表之外或全局名字空间里的参数。
虽然lambda函数看起来只能写一行,却不等同于C或C++的内联函数,后者的目的是调用小函数时不占用栈内存从而增加运行效率。
语法

lambda函数的语法只包含一个语句,如下:

复制代码 代码如下:
lambda [arg1 [,arg2,.....argn]]:expression

如下实例:
复制代码 代码如下:
#!/usr/bin/python

#可写函数说明
sum = lambda arg1, arg2: arg1 + arg2;

#调用sum函数
print "Value of total : ", sum( 10, 20 )
print "Value of total : ", sum( 20, 20 )
#以上实例输出结果:

#Value of total :  30
#Value of total :  40

六、关于return语句
return语句[表达式]退出函数,选择性地向调用方返回一个表达式。不带参数值的return语句返回None。之前的例子都没有示范如何返回数值,下例便告诉你怎么做:

复制代码 代码如下:
#!/usr/bin/python

# 可写函数说明
def sum( arg1, arg2 ):
   # 返回2个参数的和."
   total = arg1 + arg2
   print "Inside the function : ", total
   return total;

# 调用sum函数
total = sum( 10, 20 );
print "Outside the function : ", total
#以上实例输出结果:

#Inside the function :  30
#Outside the function :  30


七、变量作用域
一个程序的所有的变量并不是在哪个位置都可以访问的。访问权限决定于这个变量是在哪里赋值的。

变量的作用域决定了在哪一部分程序你可以访问哪个特定的变量名称。两种最基本的变量作用域如下:
1.全局变量
2.局部变量

八、变量和局部变量
定义在函数内部的变量拥有一个局部作用域,定义在函数外的拥有全局作用域。

局部变量只能在其被声明的函数内部访问,而全局变量可以在整个程序范围内访问。调用函数时,所有在函数内声明的变量名称都将被加入到作用域中。如下实例:

复制代码 代码如下:
#!/usr/bin/python

total = 0; # This is global variable.
# 可写函数说明
def sum( arg1, arg2 ):
   #返回2个参数的和."
   total = arg1 + arg2; # total在这里是局部变量.
   print "Inside the function local total : ", total
   return total;

#调用sum函数
sum( 10, 20 );
print "Outside the function global total : ", total
#以上实例输出结果:

#Inside the function local total :  30
#Outside the function global total :  0

相关文章

  • Python OpenCV实现视频分帧

    Python OpenCV实现视频分帧

    这篇文章主要为大家详细介绍了Python OpenCV实现视频分帧,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-06-06
  • Python编程实现数学运算求一元二次方程的实根算法示例

    Python编程实现数学运算求一元二次方程的实根算法示例

    这篇文章主要介绍了Python编程实现数学运算求一元二次方程的实根算法,涉及Python数学运算求解方程的相关实现技巧,需要的朋友可以参考下
    2017-04-04
  • PyTorch 如何检查模型梯度是否可导

    PyTorch 如何检查模型梯度是否可导

    这篇文章主要介绍了PyTorch 检查模型梯度是否可导的操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-06-06
  • pycharm 更改创建文件默认路径的操作

    pycharm 更改创建文件默认路径的操作

    今天小编就为大家分享一篇pycharm 更改创建文件默认路径的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-02-02
  • python如何代码集体右移

    python如何代码集体右移

    在本篇文章里小编给各位分享的是一篇关于python如何代码集体右移的相关知识点文章,需要的朋友们可以学习下。
    2020-07-07
  • 利用Python+Excel制作一个视频下载器

    利用Python+Excel制作一个视频下载器

    说起Excel,那绝对是数据处理领域王者般的存在。而作为网红语言Python,在数据领域也是被广泛使用。本文将利用Python和Excel制作一个视频下载器,需要的可以参考一下
    2022-05-05
  • Python推导式使用详情

    Python推导式使用详情

    这篇文章主要介绍了Python推导式使用详情,推导式是 for 循环的简化使用方法,使用推导式,将一个可迭代对象中的数据遍历到某一个容器当中,下面文章详细介绍需要的小伙伴可以参考一下
    2022-05-05
  • Python tkinter实现计算器功能

    Python tkinter实现计算器功能

    这篇文章主要为大家详细介绍了Python tkinter实现计算器功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-01-01
  • Python中元组的概念及应用小结

    Python中元组的概念及应用小结

    Python中的元组和列表很相似,元组也是Python语言提供的内置数据结构之一,可以在代码中直接使用,这篇文章主要介绍了Python中元组的概念以及应用,需要的朋友可以参考下
    2023-01-01
  • Django 开发调试工具 Django-debug-toolbar使用详解

    Django 开发调试工具 Django-debug-toolbar使用详解

    这篇文章主要介绍了Django 开发调试工具 Django-debug-toolbar使用详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-07-07

最新评论