详解Python中的各种函数的使用


Posted in Python onMay 24, 2015

 函数是有组织的,可重复使用的代码,用于执行一个单一的,相关的动作的块。函数为应用程序和代码重用的高度提供了更好的模块。

正如我们知道的,Python的print()等许多内置函数,但也可以创建自己的函数。这些函数称为用户定义函数。
定义一个函数

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

  •     函数块以开始关键字def后跟函数名和括号中(())。
  •     任何输入参数或参数应该放在这些括号内。还可以定义这些括号内的参数。
  •     函数的第一个语句可以是??一个可选的声明 - 该函数或文档字符串的文档字符串。
  •     每个函数中的代码块以冒号(:)开头并缩进。
  •     该语句返回[表达式]退出功能,可选地传递回一个表达式给调用者。不带参数return语句返回None。

语法:

def functionname( parameters ):
  "function_docstring"
  function_suite
  return [expression]

默认情况下,参数具有一个位置的行为和需要,它们被定义为通知他们以相同的顺序。
例子:

这是最简单的Python函数形式。这个函数接受一个字符串作为输入参数,并打印标准的屏幕上。

def printme( str ):
  "This prints a passed string into this function"
  print str
  return

调用函数

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

一旦函数的基本结构确定后,可以通过从其他函数或直接从Python提示符调用它执行它。以下是示例调用printme()函数:

#!/usr/bin/python

# 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/python

# Function definition is here
def changeme( mylist ):
  "This changes a passed list into this function"
  mylist.append([1,2,3,4]);
  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

这里,我们保持传递的对象的参考,并在同一个对象附加的值。这样,这将产生以下结果:

Values inside the function: [10, 20, 30, [1, 2, 3, 4]]
Values outside the function: [10, 20, 30, [1, 2, 3, 4]]

还有就是参数通过引用传递和引用被覆盖在被调用的函数里面一个例子。

#!/usr/bin/python

# Function definition is here
def changeme( mylist ):
  "This changes a passed list into this function"
  mylist = [1,2,3,4]; # This would assig 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/python

# 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 <module>
  printme();
TypeError: printme() takes exactly 1 argument (0 given)

关键字参数:

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

这可以跳过参数或脱离顺序,因为Python解释器能够使用提供的参数使用匹配的值的关键字。还可以使关键字调用在以下方面printme()函数:

#!/usr/bin/python

# 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/python

# 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/python

# 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/python

# 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

匿名函数:

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

  •     Lambda形式可以采取任何数量的参数,但在表现形式上只返回一个值。它们不能包含命令或多个表达式。
  •     匿名函数不能直接调用打印,因为需要lambda表达式。
  •     lambda函数都有自己的命名空间,并且不能访问变量高于在其参数列表和那些在全局命名空间等。
  •     尽管似乎lambda是一个函数的单行版本,它们不是在C或C++,其宗旨是通过调用出于性能原因在传递函数的堆栈分配相当于一行的声明。

语法

lambda函数的语法仅包含单个语句,如下:

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

以下为例子来说明函数lambda形式是如何工作的:

#!/usr/bin/python

# 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语句:

该语句返回[表达式]退出功能,可选地传递回一个表达式给调用者。不带参数return语句返回None。

以上所有的例子都没有返回任何值,但如果喜欢,可以从一个函数返回值:

#!/usr/bin/python

# 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/python

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
Python 相关文章推荐
python 简易计算器程序,代码就几行
Aug 29 Python
Python中无限元素列表的实现方法
Aug 18 Python
Python基于递归实现电话号码映射功能示例
Apr 13 Python
python 字典修改键(key)的几种方法
Aug 10 Python
一看就懂得Python的math模块
Oct 21 Python
Pandas之ReIndex重新索引的实现
Jun 25 Python
详解Python self 参数
Aug 30 Python
pytorch中交叉熵损失(nn.CrossEntropyLoss())的计算过程详解
Jan 02 Python
Django通过设置CORS解决跨域问题
Nov 26 Python
python tqdm库的使用
Nov 30 Python
matplotlib绘制鼠标的十字光标的实现(自定义方式,官方实例)
Jan 10 Python
pytorch查看网络参数显存占用量等操作
May 12 Python
Python标准库之Sys模块使用详解
May 23 #Python
Python OS模块常用函数说明
May 23 #Python
在Python中操作时间之tzset()方法的使用教程
May 22 #Python
详解Python中time()方法的使用的教程
May 22 #Python
在Python中操作时间之strptime()方法的使用
Dec 30 #Python
详解Python中的strftime()方法的使用
May 22 #Python
Python中用sleep()方法操作时间的教程
May 22 #Python
You might like
关于BIG5-HKSCS的解决方法
2007/03/20 PHP
CI框架(ajax分页,全选,反选,不选,批量删除)完整代码详解
2016/11/01 PHP
PHP7扩展开发之hello word实现方法详解
2018/01/15 PHP
PHP抽象类与接口的区别详解
2019/03/21 PHP
php计数排序算法的实现代码(附四个实例代码)
2020/03/31 PHP
JQuery给元素绑定click事件多次执行的解决方法
2014/05/29 Javascript
jquery实现倒计时功能
2015/12/28 Javascript
Js的Array数组对象详解
2016/02/22 Javascript
JavaScript将DOM事件处理程序封装为event.js 出现的低级错误问题
2016/08/03 Javascript
函数四种调用模式以及其中的this指向
2017/01/16 Javascript
详解Angular2表单-模板驱动的表单(Template-Driven Forms)
2017/08/04 Javascript
JS库之Particles.js中文开发手册及参数详解
2017/09/13 Javascript
webpack4 + react 搭建多页面应用示例
2018/08/03 Javascript
3分钟读懂移动端rem使用方法(推荐)
2019/05/06 Javascript
微信小程序HTTP请求从0到1封装
2019/09/09 Javascript
three.js利用gpu选取物体并计算交点位置的方法示例
2019/11/25 Javascript
使用vuex较为优雅的实现一个购物车功能的示例代码
2019/12/09 Javascript
Vue props中Object和Array设置默认值操作
2020/07/30 Javascript
[54:33]2018DOTA2亚洲邀请赛小组赛 A组加赛 Liquid vs Optic
2018/04/03 DOTA
[02:22]2018DOTA2亚洲邀请赛VG赛前采访
2018/04/03 DOTA
python下函数参数的传递(参数带星号的说明)
2010/09/19 Python
OpenCV-Python 摄像头实时检测人脸代码实例
2019/04/30 Python
Python 按比例获取样本数据或执行任务的实现代码
2020/12/03 Python
CSS3实现3D翻书效果
2016/06/20 HTML / CSS
CSS3 Notes: -webkit-box-reflect实现倒影的实例
2016/12/08 HTML / CSS
小区停车场管理制度
2014/01/27 职场文书
大型车展策划方案
2014/02/01 职场文书
外语系毕业生求职自荐信
2014/04/12 职场文书
3的组成教学反思
2014/04/30 职场文书
会计专业求职信
2014/08/10 职场文书
班子个人四风问题整改措施
2014/10/04 职场文书
社区党风廉政建设调研报告
2015/01/01 职场文书
物资采购管理制度
2015/08/06 职场文书
2016感恩母亲节校园广播稿
2015/12/17 职场文书
团组织关系介绍信
2019/06/24 职场文书
MySQL系列之四 SQL语法
2021/07/02 MySQL