函数调用
myFun()
# 函数的参数
# 单个参数
# 场景
# 需要动态的调整函数体中某一个处理信息
# 则可以, 以参数的形式接收到相关数据
# 定义
# def 函数名(参数名称):
# 函数体
# 函数体中, 可以直接以变量的方式使用该参数
# 函数的调用
# 函数名(参数值)
# 形参和实参的概念
# 上述函数定义中, "参数名称"即为形参;
# 在调用函数的时候, 传递的真实数据, 即为实参
# 多个参数
# 场景
# 需要动态的调整函数体中多个处理信息时
# 则可以以 逗号 做分割, 接收多个参数
# 定义
# def 函数名(参数名称1, 参数名称2):
# 函数体
# 函数体中, 可以直接以变量的方式使用所有参数
# 调用
# 方式1
# 函数名(参数1, 参数2, 参数3。)
# 形参和实参一一对应
# 方式2
# 函数名(参数名称1=参数1, 参数名称n = 参数n。)
# 可以指明形参名称
# 称为"关键字参数"
# 不需要严格按照顺序
# 不定长参数
# 场景
# 如果函数体中, 需要处理的数据, 不确定长度
# 则可以以不定长参数的方式接收数据
# 方式1
# 定义
# def 函数名(*args):
# 元组
# 函数体
# 函数体中, 可以直接以元组变量的方式使用该参数
# 使用
# 函数名(参数1, 参数2, 参数3。)
Python 函数 函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。
函数能提高应用的模块性,和代码的重复利用率。你已经知道Python提供了许多内建函数,比如print()。
但你也可以自己创建函数,这被叫做用户自定义函数。 定义一个函数 你可以定义一个由自己想要功能的函数,以下是简单的规则: 函数代码块以 def 关键词开头,后接函数标识符名称和圆括号()。
任何传入参数和自变量必须放在圆括号中间。圆括号之间可以用于定义参数。
函数的第一行语句可以选择性地使用文档字符串—用于存放函数说明。函数内容以冒号起始,并且缩进。
return [表达式] 结束函数,选择性地返回一个值给调用方。不带表达式的return相当于返回 None。
语法 def functionname( parameters ): "函数_文档字符串" function_suite return [expression] 默认情况下,参数值和参数名称是按函数声明中定义的顺序匹配起来的。 实例 以下为一个简单的Python函数,它将一个字符串作为传入参数,再打印到标准显示设备上。
实例(Python 2.0+) def printme( str ): "打印传入的字符串到标准显示设备上" print str return 函数调用 定义一个函数只给了函数一个名称,指定了函数里包含的参数,和代码块结构。 这个函数的基本结构完成以后,你可以通过另一个函数调用执行,也可以直接从Python提示符执行。
如下实例调用了printme()函数: 实例(Python 2.0+) #!/usr/bin/python# -*- coding: UTF-8 -*- # 定义函数def printme( str ): "打印任何传入的字符串" print str return # 调用函数printme("我要调用用户自定义函数!")printme("再次调用同一函数") 以上实例输出结果: 我要调用用户自定义函数!再次调用同一函数参数传递 在 python 中,类型属于对象,变量是没有类型的: a=[1,2,3] a="Runoob" 以上代码中,[1,2,3] 是 List 类型,"Runoob" 是 String 类型,而变量 a 是没有类型,她仅仅是一个对象的引用(一个指针),可以是 List 类型对象,也可以指向 String 类型对象。 可更改(mutable)与不可更改(immutable)对象 在 python 中,strings, tuples, 和 numbers 是不可更改的对象,而 list,dict 等则是可以修改的对象。
不可变类型:变量赋值 a=5 后再赋值 a=10,这里实际是新生成一个 int 值对象 10,再让 a 指向它,而 5 被丢弃,不是改变a的值,相当于新生成了a。可变类型:变量赋值 la=[1,2,3,4] 后再赋值 la[2]=5 则是将 list la 的第三个元素值更改,本身la没有动,只是其内部的一部分值被修改了。
python 函数的参数传递: 不可变类型:类似 c++ 的值传递,如 整数、字符串、元组。如fun(a),传递的只是a的值,没有影响a对象本身。
比如在 fun(a)内部修改 a 的值,只是修改另一个复制的对象,不会影响 a 本身。可变类型:类似 c++ 的引用传递,如 列表,字典。
如 fun(la),则是将 la 真正的传过去,修改后fun外部的la也会受影响python 中一切都是对象,严格意义我们不能说值传递还是引用传递,我们应该说传不可变对象和传可变对象。 python 传不可变对象实例 实例(Python 2.0+) #!/usr/bin/python# -*- coding: UTF-8 -*- def ChangeInt( a ): a = 10 b = 2ChangeInt(b)print b # 结果是 2 实例中有 int 对象 2,指向它的变量是 b,在传递给 ChangeInt 函数时,按传值的方式复制了变量 b,a 和 b 都指向了同一个 Int 对象,在 a=10 时,则新生成一个 int 值对象 10,并让 a 指向它。
传可变对象实例 实例(Python 2.0+) #!/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()函数,你必须传入一个参数,不然会出现语法错误: 实例(Python 2.0+) #!/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 printme()TypeError: printme() takes exactly 1 argument (0 given)关键字参数 关键字参数和函数调用关系紧密,函数调用使用关键字参数来确定传入的参数值。 使用关键字参数允许函数调用时参数的顺序与声明时不一致,因为 Python 解释器能够用参数名匹配参数值。
以下实例在函数 printme() 调用时使用参数名: 实例(Python 2.0+) #!/usr/bin/python# -*- coding: UTF-8 -*- #可写函数说明def printme( str ): "打印任何传入的字符串" print str return #调用printme函数printme( str = "My string") 以上实例输出结果: My string下例能将关键字参数顺序不重要展示得。
Python 中,函数的应用非常广泛,比如 input() 、print()、range()、len() 函数等等,这些都是 Python 的内置函数,可以直接使用。
除了可以直接使用的内置函数外, 还支持自定义函数,即将一段有规律的、可重复使用的代码定义成函数,从而达到一次编写、多次调用的目的。
通常,函数可以接收零个或多个参数,也可以返回零个或多个值。从函数使用者的角度来看,函数就像一个“黑匣子”,程序将零个或多个参数传入这个“黑匣子”,该“黑匣子”经过一番计算即可返回零个或多个值。
下面程序定义了两个函数:
纯文本复制
def my_max(x, y) :# 定义一个变量z,该变量等于x、y中较大的值
z = x if x > y else y# 返回变量z的值
return z# 定义一个函数,声明一个形参
def say_hi(name) :print("===正在执行say_hi()函数===")
return name + ",您好!"
调用前面创建的那 2 个函数,执行代码如下:
a = 6
b = 9
# 调用my_max()函数,将函数返回值赋值给result变量
result = my_max(a , b) # ①
print("result:", result)
# 调用say_hi()函数,直接输出函数的返回值
print(say_hi("孙悟空")) # ②
上面程序中,分别在 ① 号、② 号代码处调用了 my_max() 和 say_hi() 这两个函数。从下面的运行结果可以看出,当程序调用一个函数时,既可以把调用函数的返回值赋值给指定变量,也可以将函数的返回值传给另一个函数,作为另一个函数的参数。
运行上面程序,将可以看到如下运行结果:
result: 9
===正在执行say_hi()函数===
孙悟空,您好!
1.常用内置函数:(不用import就可以直接使用) help(obj) 在线帮助, obj可是任何类型 callable(obj) 查看一个obj是不是可以像函数一样调用 repr(obj) 得到obj的表示字符串,可以利用这个字符串eval重建该对象的一个拷贝 eval_r(str) 表示合法的python表达式,返回这个表达式 dir(obj) 查看obj的name space中可见的name hasattr(obj,name) 查看一个obj的name space中是否有name getattr(obj,name) 得到一个obj的name space中的一个name setattr(obj,name,value) 为一个obj的name space中的一个name指向vale这个object delattr(obj,name) 从obj的name space中删除一个name vars(obj) 返回一个object的name space。
用dictionary表示 locals() 返回一个局部name space,用dictionary表示 globals() 返回一个全局name space,用dictionary表示 type(obj) 查看一个obj的类型 isinstance(obj,cls) 查看obj是不是cls的instance issubclass(subcls,supcls) 查看subcls是不是supcls的子类 类型转换函数 chr(i) 把一个ASCII数值,变成字符 ord(i) 把一个字符或者unicode字符,变成ASCII数值 oct(x) 把整数x变成八进制表示的字符串 hex(x) 把整数x变成十六进制表示的字符串 str(obj) 得到obj的字符串描述 list(seq) 把一个sequence转换成一个list tuple(seq) 把一个sequence转换成一个tuple dict(),dict(list) 转换成一个dictionary int(x) 转换成一个integer long(x) 转换成一个long interger float(x) 转换成一个浮点数 complex(x) 转换成复数 max(。) 求最大值 min(。
) 求最小值 用于执行程序的内置函数 complie 如果一段代码经常要使用,那么先编译,再运行会更快。 2.和操作系统相关的调用 系统相关的信息模块 import sys sys.argv是一个list,包含所有的命令行参数. sys.stdout sys.stdin sys.stderr 分别表示标准输入输出,错误输出的文件对象. sys.stdin.readline() 从标准输入读一行 sys.stdout.write("a") 屏幕输出a sys.exit(exit_code) 退出程序 sys.modules 是一个dictionary,表示系统中所有可用的module sys.platform 得到运行的操作系统环境 sys.path 是一个list,指明所有查找module,package的路径. 操作系统相关的调用和操作 import os os.environ 一个dictionary 包含环境变量的映射关系 os.environ["HOME"] 可以得到环境变量HOME的值 os.chdir(dir) 改变当前目录 os.chdir('d:\\outlook') 注意windows下用到转义 os.getcwd() 得到当前目录 os.getegid() 得到有效组id os.getgid() 得到组id os.getuid() 得到用户id os.geteuid() 得到有效用户id os.setegid os.setegid() os.seteuid() os.setuid() os.getgruops() 得到用户组名称列表 os.getlogin() 得到用户登录名称 os.getenv 得到环境变量 os.putenv 设置环境变量 os.umask 设置umask os.system(cmd) 利用系统调用,运行cmd命令 操作举例: os.mkdir('/tmp/xx') os.system("echo 'hello' > /tmp/xx/a.txt") os.listdir('/tmp/xx') os.rename('/tmp/xx/a.txt','/tmp/xx/b.txt') os.remove('/tmp/xx/b.txt') os.rmdir('/tmp/xx') 用python编写一个简单的shell #!/usr/bin/python import os, sys cmd = sys.stdin.readline() while cmd: os.system(cmd) cmd = sys.stdin.readline() 用os.path编写平台无关的程序 os.path.abspath("1.txt") == os.path.join(os.getcwd(), "1.txt") os.path.split(os.getcwd()) 用于分开一个目录名称中的目录部分和文件名称部分。
os.path.join(os.getcwd(), os.pardir, 'a', 'a.doc') 全成路径名称. os.pardir 表示当前平台下上一级目录的字符 .. os.path.getctime("/root/1.txt") 返回1.txt的ctime(创建时间)时间戳 os.path.exists(os.getcwd()) 判断文件是否存在 os.path.expanduser('~/dir') 把~扩展成用户根目录 os.path.expandvars('$PATH') 扩展环境变量PATH os.path.isfile(os.getcwd()) 判断是否是文件名,1是0否 os.path.isdir('c:\Python26\temp') 判断是否是目录,1是0否 os.path.islink('/home/huaying/111.sql') 是否是符号连接 windows下不可用 os.path.ismout(os.getcwd()) 是否是文件系统安装点 windows下不可用 os.path.samefile(os.getcwd(), '/home/huaying') 看看两个文件名是不是指的是同一个文件 os.path.walk('/home/huaying', test_fun, "a.c") 遍历/home/huaying下所有子目录包括本目录,对于每个目录都会调用函数test_fun. 例:在某个目录中,和他所有的子目录中查找名称是a.c的文件或目录。 def test_fun(filename, dirname, names): //filename即是walk中的a.c dirname是访问的目录名称 if filename in names: //names是一个list,包含dirname目录下的所有内容 print os.path.join(dirname, filename) os.path.walk('/home/huaying', test_fun, "a.c") 文件操作 打开文件 f = open("filename", "r") r只读 w写 rw读写 rb读二进制 wb写二进制 w+写追加 读写文件 f.write("a") f.write(str) 写一字符串 f.writeline() f.readlines() 与下read类同 f.read() 全读出来 f.read(size) 表示从文件中读取size个字符 f.readline() 读一行,到文件结尾,返回空串. f.readlines() 读取全部,返回一个list. list每。
Python在设计上坚持了清晰划一的风格,这使得Python成为一门易读、易维护,并且被大量用户所欢迎的、用途广泛的语言。
接下来,记录一些本人自主学习Python的一些笔记:all 一个可迭代对象的所有元素都为真,则返回True print(all([1,2,3])) # True print(all([0,1,2])) # False12 any 一个可迭代对象中只要有一个元素为真,则返回True print(any([1,0,0])) # True print(any([0])) # False12 bin 将一个十进制数字转化成一个二进制数字的字符串 print(bin(2)) # 0b101 hex 将一个十进制数字转化成一个十六进制数字的字符串 print(hex(2)) # 0x21 oct 将一个十进制数字转化成一个八进制数字的字符串 print(oct(8)) # 0o21 callable 判断一个对象是否是可以被调用的,那么什么样才是可被调用的呢,即类似于“test()”这样的写法。函数与类皆可以被调用 b = 2 def func():pass print(callable(b),callable(func)) # False True1234 exec 将一串代码字符串,以代码的形式执行 code = ''' n = 0 while n < 10:print(n) n+=1''' exec(code)1234567 执行结果:eval 将一串基本数据类型的字符串,转化成基本数据类型 s_list = "[1,2,3,4]" l = eval(s_list) # 此时l已经是一个列表对象了 print(l[0]) # 1123 dir 查看某个类型下的所有方法 l = [1,2,3] print(dir(l)) # 此时将会打印列表的所有方法12 divmod 获取两个数相除后的商和余数 print(divmod(5,2)) # 结果:(2,1)。
5除以2得到商2,余数为11 max 获取某个可迭代对象的最大值 print(max([4,3,2,8])) # 结果:81 min 获取某个可迭代对象的最小值 print(min([4,3,2,8])) # 结果:21 sum 获取某个可迭代对象的和 print(sum([4,3,2,8])) # 结果:171 pow(a,b) 获取a的b次方 print(pow(3,3)) # 结果:271 type 查看数据类型 print(type("abc")) # 结果:1 round 保留小数。注意:它的保留方式是向下保留,并不是四舍五入 print(round(1.345,2)) # 结果:1.341 filter 将一个可迭代对象按某种特定方式过滤,生成一个新的可迭代对象 f = filter(lambda x : x > 5,range(10)) for index in f:print(index) # 打印结果:6,7,8,9123 map 将一个可迭代对象按某种特定方式处理,生成一个新的可迭代对象。
效果与列表生成式一样 m = map(lambda x : x * 2,range(10)) for index in m:print(index)# 列表生成式写法 l = [x * 2 for x in range(10)] for index in l:print(index)。
4.6. 定义函数
我们可以创建一个用来生成指定边界的斐波那契数列的函数:
>>> def fib(n): # write Fibonacci series up to n
"""Print a Fibonacci series up to n."""
a, b = 0, 1
while a < n:
print(a, end=' ')
a, b = b, a+b
print()
>>> # Now call the function we just defined:
fib(2000)
0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597
关键字 def 引入了一个函数 定义。在其后必须跟有函数名和包括形式参数的圆括号。函数体语句从下一行开始,必须是缩进的。
函数体的第一行语句可以是可选的字符串文本,这个字符串是函数的文档字符串,或者称为 docstring。(更多关于 docstrings 的信息请参考 文档字符串) 有些工具通过 docstrings 自动生成在线的或可打印的文档,或者让用户通过代码交互浏览;在你的代码中包含 docstrings 是一个好的实践,让它成为习惯吧。
函数 调用 会为函数局部变量生成一个新的符号表。确切的说,所有函数中的变量赋值都是将值存储在局部符号表。变量引用首先在局部符号表中查找,然后是包含函数的局部符号表,然后是全局符号表,最后是内置名字表。因此,全局变量不能在函数中直接赋值(除非用 global 语句命名),尽管他们可以被引用。
函数引用的实际参数在函数调用时引入局部符号表,因此,实参总是 传值调用 (这里的 值 总是一个对象 引用 ,而不是该对象的值)。[1] 一个函数被另一个函数调用时,一个新的局部符号表在调用过程中被创建。
一个函数定义会在当前符号表内引入函数名。函数名指代的值(即函数体)有一个被 Python 解释器认定为 用户自定义函数 的类型。 这个值可以赋予其他的名字(即变量名),然后它也可以被当作函数使用。这可以作为通用的重命名机制:
>>> fib
>>> f = fib
>>> f(100)
0 1 1 2 3 5 8 13 21 34 55 89
如果你使用过其他语言,你可能会反对说:fib 不是一个函数,而是一个方法,因为它并不返回任何值。事实上,没有 return 语句的函数确实会返回一个值,虽然是一个相当令人厌烦的值(指 None )。这个值被称为 None (这是一个内建名称)。如果 None 值是唯一被书写的值,那么在写的时候通常会被解释器忽略(即不输出任何内容)。如果你确实想看到这个值的输出内容,请使用 print() 函数:
Python列表定义:按特定顺序排列的元素组成。在Python中,用方括号[]来表示列表,并用逗号来分隔其中的元素。Python列表是编程中很常见的数据类型 。
列表是一种可修改的集合类型,其元素可以是数字、string等基本类型,也可以是列表、元组、字典等集合对象,甚至可以是自定义的类型。其定义方式如下:>>> nums = [1,2,3,4]>>> type(nums)>>> print nums[1, 2, 3, 4]>>> strs = ["hello","world"]>>> print strs['hello', 'world']>>> lst = [1,"hello",False,nums,strs]>>> type(lst)>>> print lst[1, 'hello', False, [1, 2, 3, 4], ['hello', 'world']]
下面我们来看一下列表中有哪些常见的方法:count():统计某个元素在列表中出现的次数。index():从列表中找出某个值第一个匹配项的索引位置。append():在列表末尾添加新对象。extend():在列表末尾一次性追加另一个序列的多个值。insert():在列表的指定位置插入对象。pop():移除列表中的一个元素(默认最后一个元素),并且返回该元素的值。remove():移除列表中某个值的第一个匹配项。reverse():将列表中的元素反向,不重新拷贝一个列表。reversed():将列表中的元素反向,重新拷贝一个列表。sort():将列表中的元素排序,不重新拷贝一个列表。sortd():将列表中的元素排序,重新拷贝一个列表。copy():浅拷贝,只是给原来的列表贴上了一个新标签,对于一个复杂对象的子对象并不会完全复制,如果有子列表,改变原来的值,新的拷贝对象也会改变。deepcopy():深拷贝,将复杂对象的每一层复制一个单独的个体出来。就是完全拷贝。常见内置函数:max()、min()、sum()、len()、all()、any()、zip()、enumerate()
python函数是指组织好的、可重复使用的、用来实现单一或相关联功能的代码段。
python函数包含系统中自带的一些函数、第三方函数、以及用户自定义的函数。步骤/方法打开IDLE python GUI,点击开始-所有程序-python2.7-IDLE python GUI,或者直接进入dos环境,或者其他的IDLE。
首先,创建一个简单的自定义函数,定义为K函数。假如x==Kill,那么,就可以代入刚才所创建的K函数,最后返回一个语句,x为任意字符,空白字符也可以。
要注意的是,用def创建函数的时候,k(x)括号里面是不用双引号的,而调用自定义函数的时候,在括号了就要加上双引号。上面的定义函数比较简单,只用了一个print输出语句,现在,定义一个累加的函数,就要用到while函数和if函数了。
A函数是用来计算累加的,其中用到了一个while循环和if判断,x为自定义变量,假如现在X为100,也就是说此函数计算1+2+3+。+100的和。
声明:本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
蜀ICP备2020033479号-4 Copyright © 2016 学习鸟. 页面生成时间:4.167秒