python 函数的学习笔记使用例子

定义一个函数
你可以定义一个由自己想要功能的函数,以下是简单的规则:

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

--------------------------------------------------------------------------------

语法
def functionname( parameters ):
   "函数_文档字符串"
   function_suite
   return [expression]
默认情况下,参数值和参数名称是按函数声明中定义的的顺序匹配起来的。

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

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

--------------------------------------------------------------------------------

函数调用
定义一个函数只给了函数一个名称,指定了函数里包含的参数,和代码块结构。

这个函数的基本结构完成以后,你可以通过另一个函数调用执行,也可以直接从Python提示符执行。

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

#!/usr/bin/python
# -*- coding: UTF-8 -*-
 
# 定义函数
def printme( str ):
   "打印任何传入的字符串"
   print str;
   return;
 
# 调用函数
printme("我要调用用户自定义函数!");
printme("再次调用同一函数");
以上实例输出结果:

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

--------------------------------------------------------------------------------

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

#!/usr/bin/python
# -*- coding: UTF-8 -*-
 
# 可写函数说明
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]]

--------------------------------------------------------------------------------

参数
以下是调用函数时可使用的正式参数类型:

必备参数
命名参数
缺省参数
不定长参数
必备参数
必备参数须以正确的顺序传入函数。调用时的数量必须和声明时的一样。

调用printme()函数,你必须传入一个参数,不然会出现语法错误:

#!/usr/bin/python
# -*- coding: UTF-8 -*-
 
#可写函数说明
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)
命名参数
命名参数和函数调用关系紧密,调用方用参数的命名确定传入的参数值。你可以跳过不传的参数或者乱序传参,因为Python解释器能够用参数名匹配参数值。用命名参数调用printme()函数:

#!/usr/bin/python
# -*- coding: UTF-8 -*-
 
#可写函数说明
def printme( str ):
   "打印任何传入的字符串"
   print str;
   return;
 
#调用printme函数
printme( str = "My string");
以上实例输出结果:

My string
下例能将命名参数顺序不重要展示得更清楚:

#!/usr/bin/python
# -*- coding: UTF-8 -*-
 
#可写函数说明
def printinfo( name, age ):
   "打印任何传入的字符串"
   print "Name: ", name;
   print "Age ", age;
   return;
 
#调用printinfo函数
printinfo( age=50, name="miki" );
以上实例输出结果:

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

#!/usr/bin/python
# -*- coding: UTF-8 -*-
 
#可写函数说明
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
不定长参数
你可能需要一个函数能处理比当初声明时更多的参数。这些参数叫做不定长参数,和上述2种参数不同,声明时不会命名。基本语法如下:

def functionname([formal_args,] *var_args_tuple ):
   "函数_文档字符串"
   function_suite
   return [expression]
加了星号(*)的变量名会存放所有未命名的变量参数。选择不多传参数也可。如下实例:

#!/usr/bin/python
# -*- coding: UTF-8 -*-
 
# 可写函数说明
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

--------------------------------------------------------------------------------

匿名函数
python 使用 lambda 来创建匿名函数。

lambda只是一个表达式,函数体比def简单很多。
lambda的主体是一个表达式,而不是一个代码块。仅仅能在lambda表达式中封装有限的逻辑进去。
lambda函数拥有自己的名字空间,且不能访问自有参数列表之外或全局名字空间里的参数。
虽然lambda函数看起来只能写一行,却不等同于C或C++的内联函数,后者的目的是调用小函数时不占用栈内存从而增加运行效率。
语法
lambda函数的语法只包含一个语句,如下:

lambda [arg1 [,arg2,.....argn]]:expression
如下实例:

#!/usr/bin/python
# -*- coding: UTF-8 -*-
 
# 可写函数说明
sum = lambda arg1, arg2: arg1 + arg2;
 
# 调用sum函数
print "相加后的值为 : ", sum( 10, 20 )
print "相加后的值为 : ", sum( 20, 20 )
以上实例输出结果:

相加后的值为 :  30
相加后的值为 :  40

--------------------------------------------------------------------------------

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

#!/usr/bin/python
# -*- coding: UTF-8 -*-
 
# 可写函数说明
def sum( arg1, arg2 ):
   # 返回2个参数的和."
   total = arg1 + arg2
   print "函数内 : ", total
   return total;
 
# 调用sum函数
total = sum( 10, 20 );
print "函数外 : ", total
以上实例输出结果:

函数内 :  30
函数外 :  30

--------------------------------------------------------------------------------

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

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

全局变量
局部变量

--------------------------------------------------------------------------------

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

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

#!/usr/bin/python
# -*- coding: UTF-8 -*-

total = 0; # 这是一个全局变量
# 可写函数说明
def sum( arg1, arg2 ):
   #返回2个参数的和."
   total = arg1 + arg2; # total在这里是局部变量.
   print "函数内是局部变量 : ", total
   return total;
 
#调用sum函数
sum( 10, 20 );
print "函数外是全局变量 : ", total
以上实例输出结果:

函数内是局部变量 :  30
函数外是全局变量 :  0

python有很多内置函数,一般比较容易理解和调用
例如常用的数据类型转换int函数
a=int('123')
print(a)
返回123

实际上很多时候需要自定义函数,自定义函数使用def语句,格式如下:
def 函数名(参数):
    语句
    return
做一个简单的加法函数
a=input('a=')
b=input('b=')
c=int(a)
d=int(b)

def sum(x,y):
    sum=x+y
    return sum
print(sum(c,d))
结果返回为3。

较为复杂的是多参数的函数,例如输入一个数字,求它的n次方。
a=int(input('a='))
b=int(input('chengfang'))
def cf(x,y):
    s=1
    while y>0:
        y=y-1
        s=s*x
    return s
print(cf(a,b))
当参数没有被输入则出现错误,此时可以对函数的参数设置一个默认值,即cf(x,y=2)。

时间: 2024-10-23 21:55:52

python 函数的学习笔记使用例子的相关文章

Python 函数的学习笔记

1 函数调用 在程序设计中,函数是指用于进行某种计算的一系列语句的有名称的组合.定义一个函数时,需要指定函数的名称并写下一系列程序语句.之后,就可以使用名称来"调用"这个函数.前面我们已经见过函数调用的例子: >>> type(32) <type 'int'> 这个函数的名称是 type,括号中的表达式我们称之为函数的参数.这个函数调用的结果是参数的类型. 我们通常说函数"接收"参数,并"返回"结果.这个结果称为返回

python网络编程学习笔记(二):socket建立网络客户端_python

1.建立socket 建立socket对象需要搞清通信类型和协议家族.通信类型指明了用什么协议来传输数据.协议的例子包括IPv4.IPv6.IPX\SPX.AFP.对于internet通信,通信类型基本上都是AF_INET(和IPv4对应).协议家族一般表示TCP通信的SOCK_STREAM或者表示UDP通信的SOCK_DGRAM.因此对于TCP通信,建立一个socket连接的语句为:s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)对于UDP通

Python os模块学习笔记

  这篇文章主要介绍了Python os模块学习笔记,本文总结了OS模块的常用方法.实用方法,并给出了两个使用实例,需要的朋友可以参考下 一.os模块概述 Python os模块包含普遍的操作系统功能.例如文件的复制.创建.修改.删除文件及文件夹... 二.常用方法 1.os.listdir() 返回指定目录下的所有文件和目录名. 2.os.remove() 删除一个文件. 3.os.system() 运行shell命令. 4.os.path.split() 函数返回一个路径的目录名和文件名 5

JavaScript权威设计--JavaScript函数(简要学习笔记十一)

1.函数调用的四种方式 第三种:构造函数调用 如果构造函数调用在圆括号内包含一组实参列表,先计算这些实参表达式,然后传入函数内.这和函数调用和方法调用是一致的.但如果构造函数没有形参,JavaScript构造函数调用的语法是允许省略实参列表和圆括号的. 如: var o=new Object(); //->等价于 var o=new Object;   第四种:使用call()与apply()间接调用(放在后面详细说明)   2.函数的实参与形参--可选形参 先看一个例子: function g

JavaScript权威设计--JavaScript函数(简要学习笔记十)

1.函数命名规范 函数命名通常以动词为前缀的词组.通常第一个字符小写.当包含多个单词时,一种约定是将单词以下划线分割,就像"like_Zqz()". 还有一种就是"likeZqz()".有些些函数是用作内部用的或者为私有函数通常以一条下划线为前缀,就像"_zqzName()".   2.以表达式方式定义的函数 如: var zqz=function (){ return "zhaoqize"; } 在使用的时候必须把它赋值给一

Python核心编程学习笔记之映射类型(上)

 根据核心编程第二版学习Python3.x的内容,可能有些欠缺,有些方法在3.x中已经不提供了,就暂时先略过了.等以后再对比2.x和3.x的区别,作下笔记吧 1.    Python中字典的定位: a)      字典是python中唯一的映射类型,通常被认为是可变的哈希表. b)     字典对象是可变的,能存储任意多个python对象. c)      字典是Python中最强大的数据类型之一 2.    字典(dict)和序列类型容器类(列表和元组)的区别: a)      存储和访问数据

python面向对象的学习笔记

创建类: #!/usr/bin/python # Filename: simplestclass.py   class Person:     pass # An empty block   p = Person() print p $ python simplestclass.py <__main__.Person instance at 0xf6fcb18c> 我们使用类名后跟一对圆括号来创建一个对象/实例.为了验证,我们简单地打印了这个变量的类型.它告诉我们我们已经在__main__模块

python网络编程学习笔记(一)_python

学习用书:<python 网络编程基础>作者John Goerzen 第一部分底层网络学习         Python提供了访问底层操作系统Socket接口的全部方法,需要的时候这些接口可以提供灵活而强有力的功能. (1)基本客户端操作         在<python 网络编程基础>一书中,作者列出了一个简单的Python客户端程序,具体如下: 复制代码 代码如下: import socket,sysport =70host=sys.argv[1] filename=sys.a

Python tempfile模块学习笔记(临时文件)_python

tempfile.TemporaryFile 如何你的应用程序需要一个临时文件来存储数据,但不需要同其他程序共享,那么用TemporaryFile函数创建临时文件是最好的选择.其他的应用程序是无法找到或打开这个文件的,因为它并没有引用文件系统表.用这个函数创建的临时文件,关闭后会自动删除. 实例一: 复制代码 代码如下: import osimport tempfile print 'Building a file name yourself:'filename = '/tmp/guess_my