详解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 02 Python
python opencv实现运动检测
Jul 10 Python
Flask框架Flask-Principal基本用法实例分析
Jul 23 Python
Python使用type关键字创建类步骤详解
Jul 23 Python
通过字符串导入 Python 模块的方法详解
Oct 27 Python
使用tqdm显示Python代码执行进度功能
Dec 08 Python
python单例设计模式实现解析
Jan 07 Python
python同义词替换的实现(jieba分词)
Jan 21 Python
Python如何实现在字符串里嵌入双引号或者单引号
Mar 02 Python
Python基于yaml文件配置logging日志过程解析
Jun 23 Python
如何基于Python爬虫爬取美团酒店信息
Nov 03 Python
Python爬虫实战之爬取京东商品数据并实实现数据可视化
Jun 07 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
PHP 开发环境配置(Zend Server安装)
2010/04/28 PHP
PHP gbk环境下json_dencode传送来的汉字
2012/11/13 PHP
php实现仿写CodeIgniter的购物车类
2015/07/29 PHP
详解PHP中array_rand函数的使用方法
2016/09/11 PHP
php实现的三个常用加密解密功能函数示例
2017/11/06 PHP
jQuery Tools tab使用介绍
2012/07/14 Javascript
如何在指定的地方插入html内容和文本内容
2013/12/23 Javascript
JavaScript使用HTML5的window.postMessage实现跨域通信例子
2014/04/11 Javascript
jQuery提交多个表单的小技巧
2014/07/27 Javascript
js实现简单锁屏功能实例
2015/05/27 Javascript
Javascript中的作用域和上下文深入理解
2015/07/03 Javascript
JavaScript 正则表达式中global模式的特性
2016/02/25 Javascript
javascript创建cookie、读取cookie
2016/03/31 Javascript
浅谈JavaScript 数据属性和访问器属性
2016/09/01 Javascript
详解JavaScript调用栈、尾递归和手动优化
2017/06/03 Javascript
vue router路由嵌套不显示问题的解决方法
2017/06/17 Javascript
js时间戳与日期格式之间转换详解
2017/12/11 Javascript
Bootstrap popover 实现鼠标移入移除显示隐藏功能方法
2018/01/24 Javascript
Python中的MongoDB基本操作:连接、查询实例
2015/02/13 Python
python和bash统计CPU利用率的方法
2015/07/10 Python
详解Django中的权限和组以及消息
2015/07/23 Python
Python3.5 + sklearn利用SVM自动识别字母验证码方法示例
2019/05/10 Python
详解Numpy数组转置的三种方法T、transpose、swapaxes
2019/05/27 Python
python字符串替换re.sub()方法解析
2019/09/18 Python
python+selenium+chrome批量文件下载并自动创建文件夹实例
2020/04/27 Python
用CSS3实现无限循环的无缝滚动的实例代码
2017/07/04 HTML / CSS
购买一个高级域名:BuyDomains
2018/03/11 全球购物
英国二手iPhone、音乐、电影和游戏商店:musicMagpie
2018/10/26 全球购物
Java的基础面试题附答案
2016/01/10 面试题
安全生产责任书
2014/03/12 职场文书
新教师培训方案
2014/06/08 职场文书
员工年终自我评价
2014/09/14 职场文书
学生未请假就回家检讨书
2014/09/22 职场文书
2015年大学生村官工作总结
2015/04/21 职场文书
导游词之崇武古城
2019/10/07 职场文书
python画条形图的具体代码
2022/04/20 Python