详解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 相关文章推荐
在GitHub Pages上使用Pelican搭建博客的教程
Apr 25 Python
Python数据结构与算法之图的广度优先与深度优先搜索算法示例
Dec 14 Python
DataFrame中去除指定列为空的行方法
Apr 08 Python
Django model序列化为json的方法示例
Oct 16 Python
python3.4控制用户输入与输出的方法
Oct 17 Python
Python实现K折交叉验证法的方法步骤
Jul 11 Python
django2笔记之路由path语法的实现
Jul 17 Python
pygame实现五子棋游戏
Oct 29 Python
python 在sql语句中使用%s,%d,%f说明
Jun 06 Python
Python学习笔记之装饰器
Aug 06 Python
对pytorch中x = x.view(x.size(0), -1) 的理解说明
Mar 03 Python
Python实现双向链表基本操作
May 25 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
javascript,php获取函数参数对象的代码
2011/02/03 PHP
完美解决phpdoc导出文档中@package的warning及Error的错误
2016/05/17 PHP
PHP code 验证码生成类定义和简单使用示例
2020/05/27 PHP
基于jQuery的投票系统显示结果插件
2011/08/12 Javascript
jquery索引在使用中的一些困惑
2013/10/24 Javascript
JQuery中extend的用法实例分析
2015/02/08 Javascript
JavaScript实现获取dom中class的方法
2015/02/09 Javascript
jQuery插件slides实现无缝轮播图特效
2015/04/17 Javascript
详解JavaScript中数组的相关知识
2015/07/29 Javascript
Bootstrap3学习笔记(三)之表格
2016/05/20 Javascript
iframe中使用jquery进行查找的方法【案例分析】
2016/06/17 Javascript
node.js中 stream使用教程
2016/08/28 Javascript
nodejs基础知识
2017/02/03 NodeJs
jQuery遮罩层实例讲解
2017/05/11 jQuery
详解Node全局变量global模块
2017/09/28 Javascript
小程序云开发实现数据库异步操作同步化
2019/05/18 Javascript
vue从后台渲染文章列表以及根据id跳转文章详情详解
2020/12/14 Vue.js
python爬取网站数据保存使用的方法
2013/11/20 Python
Django中使用locals()函数的技巧
2015/07/16 Python
Python设计模式之抽象工厂模式
2016/08/25 Python
Python操作MongoDB详解及实例
2017/05/18 Python
基于Python的XSS测试工具XSStrike使用方法
2017/07/29 Python
对pandas中Series的map函数详解
2018/07/25 Python
pytorch 固定部分参数训练的方法
2019/08/17 Python
python GUI库图形界面开发之PyQt5信号与槽基础使用方法与实例
2020/03/06 Python
canvas实现图片镜像翻转的2种方式
2020/07/22 HTML / CSS
雅诗兰黛澳大利亚官网:Estée Lauder澳大利亚
2019/05/31 全球购物
技校毕业生自荐信范文
2014/03/07 职场文书
年终晚会主持词
2014/03/25 职场文书
班主任师德师风自我剖析材料
2014/10/02 职场文书
公安局班子个人对照检查材料思想汇报
2014/10/09 职场文书
2014年圣诞节寄语
2014/12/08 职场文书
2016年春季运动会广播稿
2015/08/19 职场文书
2016大学军训通讯稿
2015/11/25 职场文书
Python控制台输出俄罗斯方块的方法实例
2021/04/17 Python
Python+Appium自动化测试的实战
2021/06/30 Python