如何修改网站模板,宁波互联网,wordpress简洁设置,莒县住房和城乡规划建设局网站python 函数函数是组织好的#xff0c;可重复使用的#xff0c;用来实现单一#xff0c;或相关联功能的代码段。函数能提高应用的模块性#xff0c;和代码的重复利用率。你已经知道Python提供了许多内建函数#xff0c;比如print()。但你也可以自己创建函数#xff0c;这…python 函数函数是组织好的可重复使用的用来实现单一或相关联功能的代码段。函数能提高应用的模块性和代码的重复利用率。你已经知道Python提供了许多内建函数比如print()。但你也可以自己创建函数这被叫做用户自定义函数。定义一个函数在Python中定义一个函数要使用def语句依次写出函数名、括号、括号中的参数和冒号:然后在缩进块中编写函数体函数的返回值用return语句返回。函数式编程和面向过程编程的区别函数式将某功能代码封装到函数中日后便无需重复编写仅调用函数即可面向对象对函数进行分类和封装让开发“更快更好更强...”你可以定义一个由自己想要功能的函数以下是简单的规则函数代码块以 def 关键词开头后接函数标识符名称和圆括号()。任何传入参数和自变量必须放在圆括号中间。圆括号之间可以用于定义参数。函数的第一行语句可以选择性地使用文档字符串—用于存放函数说明。函数内容以冒号起始并且缩进。return [表达式] 结束函数选择性地返回一个值给调用方。不带表达式的return相当于返回 None。语法def functionname( parameters ):函数_文档字符串function_suitereturn [expression]默认情况下参数值和参数名称是按函数声明中定义的的顺序匹配起来的。请注意函数体内部的语句在执行时一旦执行到return时函数就执行完毕并将结果返回。因此函数内部通过条件判断和循环可以实现非常复杂的逻辑。如果没有return语句函数执行完毕后也会返回结果只是结果为None。return None可以简写为return。定义和使用def 函数名(参数):...函数体...返回值函数的定义主要有如下要点def表示函数的关键字函数名函数的名称日后根据函数名调用函数函数体函数中进行一系列的逻辑计算如发送邮件、计算出 [11,22,38,888,2]中的最大数等...参数为函数体提供数据返回值当函数执行完毕后可以给调用者返回数据。返回值函数是一个功能块该功能到底执行成功与否需要通过返回值来告知调用者。实例以下为一个简单的Python函数它将一个字符串作为传入参数再打印到标准显示设备上。def printme( str ):打印传入的字符串到标准显示设备上print strreturn空函数如果想定义一个什么事也不做的空函数可以用pass语句def nop():passpass语句什么都不做那有什么用实际上pass可以用来作为占位符比如现在还没想好怎么写函数的代码就可以先放一个pass让代码能运行起来。小结定义函数时需要确定函数名和参数个数如果有必要可以先对参数的数据类型做检查函数体内部可以用return随时返回函数结果函数执行完毕也没有return语句时自动return None。函数可以同时返回多个值但其实就是一个tuple。函数调用定义一个函数只给了函数一个名称指定了函数里包含的参数和代码块结构。这个函数的基本结构完成以后你可以通过另一个函数调用执行也可以直接从Python提示符执行。如下实例调用了printme()函数#!/usr/bin/python# -*- coding: UTF-8 -*-# 定义函数def printme( str ):打印任何传入的字符串print str;return;# 调用函数printme(我要调用用户自定义函数!);printme(再次调用同一函数);以上实例输出结果我要调用用户自定义函数!再次调用同一函数函数的有三中不同的参数普通参数默认参数动态参数普通参数# ######### 定义函数 ########## name 叫做函数func的形式参数简称形参def func(name):print name# ######### 执行函数 ########## ‘wupeiqi‘ 叫做函数func的实际参数简称实参func(‘wupeiqi‘)普通参数默认参数def func(name, age 18):print %s:%s %(name,age)# 指定参数func(‘wupeiqi‘, 19)# 使用默认参数func(‘alex‘)注默认参数需要放在参数列表最后默认参数动态参数def func(*args):print args# 执行方式一func(11,33,4,4454,5)# 执行方式二li [11,2,2,3,3,4,54]func(*li)动态参数def func(*args):print args# 执行方式一func(11,33,4,4454,5)# 执行方式二li [11,2,2,3,3,4,54]func(*li)动态参数def func(*args, **kwargs):print argsprint kwargs按值传递参数和按引用传递参数定义函数的时候我们把参数的名字和位置确定下来函数的接口定义就完成了。对于函数的调用者来说只需要知道如何传递正确的参数以及函数将返回什么样的值就够了函数内部的复杂逻辑被封装起来调用者无需了解。Python的函数定义非常简单但灵活度却非常大。除了正常定义的必选参数外还可以使用默认参数、可变参数和关键字参数使得函数定义出来的接口不但能处理复杂的参数还可以简化调用者的代码。所有参数(自变量)在Python里都是按引用传递。如果你在函数里修改了参数那么在调用这个函数的函数里原始的参数也被改变了。例如#!/usr/bin/python# -*- coding: UTF-8 -*-# 可写函数说明def changeme( mylist ):修改传入的列表mylist.append([1,2,3,4]);print 函数内取值: , mylistreturn# 调用changeme函数mylist [10,20,30];changeme( mylist );print 函数外取值: , mylist传入函数的和在末尾添加新内容的对象用的是同一个引用。故输出结果如下函数内取值: [10, 20, 30, [1, 2, 3, 4]]函数外取值: [10, 20, 30, [1, 2, 3, 4]]参数以下是调用函数时可使用的正式参数类型必备参数关键字参数默认参数不定长参数设置默认参数时有几点要注意一是必选参数在前默认参数在后否则Python的解释器会报错(思考一下为什么默认参数不能放在必选参数前面)二是如何设置默认参数。当函数有多个参数时把变化大的参数放前面变化小的参数放后面。变化小的参数就可以作为默认参数。使用默认参数有什么好处最大的好处是能降低调用函数的难度必备参数必备参数须以正确的顺序传入函数。调用时的数量必须和声明时的一样。调用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 printme();TypeError: printme() takes exactly 1 argument (0 given)关键字参数可变参数允许你传入0个或任意个参数这些可变参数在函数调用时自动组装为一个tuple。而关键字参数允许你传入0个或任意个含参数名的参数这些关键字参数在函数内部自动组装为一个dict。关键字参数和函数调用关系紧密函数调用使用关键字参数来确定传入的参数值。使用关键字参数允许函数调用时参数的顺序与声明时不一致因为 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( age50, namemiki );以上实例输出结果Name: mikiAge 50对于关键字参数函数的调用者可以传入任意不受限制的关键字参数。使用命名关键字参数时要特别注意如果没有可变参数就必须加一个*作为特殊分隔符。如果缺少*Python解释器将无法识别位置参数和命名关键字参数缺省参数调用函数时缺省参数的值如果没有传入则被认为是默认值。下例会打印默认的age如果age没有被传入1 #!/usr/bin/python2 #-*- coding: UTF-8 -*-34 #可写函数说明5 def printinfo( name, age 35):6 打印任何传入的字符串7 print Name:, name;8 print Age, age;9 return;1011 #调用printinfo函数12 printinfo( age50, namemiki);13 printinfo( namemiki );以上实例输出结果Name: mikiAge 50Name: mikiAge 35不定长参数你可能需要一个函数能处理比当初声明时更多的参数。这些参数叫做不定长参数和上述2种参数不同声明时不会命名。基本语法如下1 def functionname([formal_args,] *var_args_tuple ):2 函数_文档字符串3 function_suite4 return [expression]加了星号(*)的变量名会存放所有未命名的变量参数。选择不多传参数也可。如下实例#!/usr/bin/python# -*- coding: UTF-8 -*-# 可写函数说明def printinfo( arg1, *vartuple ):打印任何传入的参数print 输出: print arg1for var in vartuple:print varreturn;# 调用printinfo 函数printinfo( 10 );printinfo( 70, 60, 50 );以上实例输出结果输出:10输出:706050递归函数在函数内部可以调用其他函数。如果一个函数在内部调用自身本身这个函数就是递归函数。举个例子我们来计算阶乘n! 1 x 2 x 3 x ... x n用函数fact(n)表示可以看出fact(n) n! 1 x 2 x 3 x ... x (n-1) x n (n-1)! x n fact(n-1) x n所以fact(n)可以表示为n x fact(n-1)只有n1时需要特殊处理。于是fact(n)用递归的方式写出来就是def fact(n):if n1:return 1return n * fact(n - 1)上面就是一个递归函数。可以试试 fact(1)1 fact(5)120 fact(100)93326215443944152681699238856266700490715968264381621468592963895217599993229915608941463976156518286253697920827223758251185210916864000000000000000000000000如果我们计算fact(5)可以根据函数定义看到计算过程如下 fact(5) 5 * fact(4) 5 * (4 * fact(3)) 5 * (4 * (3 * fact(2))) 5 * (4 * (3 * (2 * fact(1)))) 5 * (4 * (3 * (2 * 1))) 5 * (4 * (3 * 2)) 5 * (4 * 6) 5 * 24 120递归函数的优点是定义简单逻辑清晰。理论上所有的递归函数都可以写成循环的方式但循环的逻辑不如递归清晰。使用递归函数需要注意防止栈溢出。在计算机中函数调用是通过栈(stack)这种数据结构实现的每当进入一个函数调用栈就会加一层栈帧每当函数返回栈就会减一层栈帧。由于栈的大小不是无限的所以递归调用的次数过多会导致栈溢出。解决递归调用栈溢出的方法是通过尾递归优化事实上尾递归和循环的效果是一样的所以把循环看成是一种特殊的尾递归函数也是可以的。尾递归是指在函数返回的时候调用自身本身并且return语句不能包含表达式。这样编译器或者解释器就可以把尾递归做优化使递归本身无论调用多少次都只占用一个栈帧不会出现栈溢出的情况。尾递归调用时如果做了优化栈不会增长因此无论多少次调用也不会导致栈溢出。遗憾的是大多数编程语言没有针对尾递归做优化Python解释器也没有做优化所以即使把上面的fact(n)函数改成尾递归方式也会导致栈溢出。小结使用递归函数的优点是逻辑简单清晰缺点是过深的调用会导致栈溢出。针对尾递归优化的语言可以通过尾递归防止栈溢出。尾递归事实上和循环是等价的没有循环语句的编程语言只能通过尾递归实现循环。Python标准的解释器没有针对尾递归做优化任何递归函数都存在栈溢出的问题。匿名函数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 )以上实例输出结果return 语句return语句[表达式]退出函数选择性地向调用方返回一个表达式。不带参数值的return语句返回None。之前的例子都没有示范如何返回数值下例便告诉你怎么做#!/usr/bin/python# -*- coding: UTF-8 -*-# 可写函数说明def sum( arg1, arg2 ):# 返回2个参数的和.total arg1 arg2print 函数内 : , totalreturn total;# 调用sum函数total sum( 10, 20 );以上实例输出结果函数内 : 30小结Python的函数具有非常灵活的参数形态既可以实现简单的调用又可以传入非常复杂的参数。默认参数一定要用不可变对象如果是可变对象程序运行时会有逻辑错误要注意定义可变参数和关键字参数的语法*args是可变参数args接收的是一个tuple**kw是关键字参数kw接收的是一个dict。以及调用函数时如何传入可变参数和关键字参数的语法可变参数既可以直接传入func(1, 2, 3)又可以先组装list或tuple再通过*args传入func(*(1, 2, 3))关键字参数既可以直接传入func(a1, b2)又可以先组装dict再通过**kw传入func(**{‘a‘: 1, ‘b‘: 2})。使用*args和**kw是Python的习惯写法当然也可以用其他参数名但最好使用习惯用法。命名的关键字参数是为了限制调用者可以传入的参数名同时可以提供默认值。定义命名的关键字参数在没有可变参数的情况下不要忘了写分隔符*否则定义的将是位置参数。变量作用域一个程序的所有的变量并不是在哪个位置都可以访问的。访问权限决定于这个变量是在哪里赋值的。变量的作用域决定了在哪一部分程序你可以访问哪个特定的变量名称。两种最基本的变量作用域如下全局变量局部变量全局变量和局部变量定义在函数内部的变量拥有一个局部作用域定义在函数外的拥有全局作用域。局部变量只能在其被声明的函数内部访问而全局变量可以在整个程序范围内访问。调用函数时所有在函数内声明的变量名称都将被加入到作用域中。如下实例#!/usr/bin/python# -*- coding: UTF-8 -*-total 0; # 这是一个全局变量# 可写函数说明def sum( arg1, arg2 ):#返回2个参数的和.total arg1 arg2; # total在这里是局部变量.print 函数内是局部变量 : , totalreturn total;#调用sum函数sum( 10, 20 );print 函数外是全局变量 : , total以上实例输出结果函数内是局部变量 : 30函数外是全局变量 : 0内置函数Python3版本所有的内置函数The Python interpreter has a number of functions and types built into it that are always available. They are listed here in alphabetical order.注: 查看3.0版本详细猛击这里查看2.0版本详细猛击这里1. abs() 获取绝对值2. all() 接受一个迭代器如果迭代器的所有元素都为真那么返回True否则返回False3. any() 接受一个迭代器如果迭代器里有一个元素为真那么返回True,否则返回False4. ascii() 调用对象的__repr__()方法获得该方法的返回值.5. bin(), 6. oct(), 7. hex() 三个函数功能为将十进制数分别转换为2/8/16进制。8. bool() 测试一个对象是True还是False.9. bytes() 将一个字符串转换成字节类型10. str() 将字符类型/数值类型等转换为字符串类型11. challable() 判断对象是否可以被调用能被调用的对象就是一个callables对象比如函数和带有__call__()的实例。12. char()13. ord() 查看十进制数对应的ASCII字符/查看某个ASCII对应的十进制数。14. classmethod() 用来指定一个方法为类的方法由类直接调用执行只有一个cls参数,执行雷的方法时自动将调用该方法的类赋值给cls.没有此参数指定的类的方法为实例方法。15. complie() 将字符串编译成python能识别或可以执行的代码也可以将文字读成字符串再编译。16. complex()17. delattr() 删除对象的属性具体查看python面向对象类的成员中属性的详细介绍18. dict() 创建数据字典19. dir() 不带参数时返回当前范围内的变量方法和定义的类型列表带参数时返回参数的属性方法列表。20. divmod() 分别取商和余数21. enumerate() 返回一个可以枚举的对象该对象的next()方法将返回一个元组。22. eval() 将字符串str当成有效的表达式来求值并返回计算结果23. exec() 执行字符串或complie方法编译过的字符串没有返回值24. filter() 过滤器构造一个序列等价于[ item for item in iterables if function(item)]在函数中设定过滤条件逐一循环迭代器中的元素将返回值为True时的元素留下形成一个filter类型数据。25. float() 讲一个字符串或整数转换为浮点数。26. format() 格式化输出字符串format(value, format_spec)实质上是调用了value的__format__(format_spec)方法。27. frozenset() 创建一个不可修改的集合。28. getattr() 获取对象的属性29. globals() 返回一个描述当前全局变量的字典30. hasattr()31. hash() 哈希值32. help() 返回对象的帮助文档33. id() 返回对象的内存地址34. input() 获取用户输入内容35. int() 将一个字符串或数值转换为一个普通整数36. isinstance() 检查对象是否是类的对象返回True或False37. issubclass() 检查一个类是否是另一个类的子类。返回True或False38. iter()39. len() 返回对象长度参数可以是序列类型(字符串元组或列表)或映射类型(如字典)40. list() 列表构造函数。41. locals() 打印当前可用的局部变量的字典42. map()43. max() 返回给定元素里最大值44. meoryview()45. min() 返回给定元素里最小值46. next() 返回一个可迭代数据结构(如列表)中的下一项47. object()48. open() 打开文件49. pow() 幂函数50. print() 输出函数51. property()52. range() 根据需要生成一个指定范围的数字可以提供你需要的控制来迭代指定的次数53. repr() 将任意值转换为字符串供计时器读取的形式54. reversed() 反转逆序对象55. round() 四舍五入56. set()57. setattr() 与getattr()相对应58. slice() 切片功能59. sorted() 排序60. staticmethod()61. str() 字符串构造函数62. sum() 求和63. super() 调用父类的方法64. tuple() 元组构造函数65. type() 显示对象所属的类型66. vars()67. zip() 将对象逐一配对68. __import__()分类一、数学运算类abs(x)求绝对值1、参数可以是整型也可以是复数2、若参数是复数则返回复数的模complex([real[, imag]])创建一个复数divmod(a, b)分别取商和余数注意整型、浮点型都可以float([x])将一个字符串或数转换为浮点数。如果无参数将返回0.0int([x[, base]])将一个字符转换为int类型base表示进制long([x[, base]])将一个字符转换为long类型pow(x, y[, z])返回x的y次幂range([start], stop[, step])产生一个序列默认从0开始round(x[, n])四舍五入sum(iterable[, start])对集合求和oct(x)将一个数字转化为8进制hex(x)将整数x转换为16进制字符串chr(i)返回整数i对应的ASCII字符bin(x)将整数x转换为二进制字符串bool([x])将x转换为Boolean类型二、集合类操作basestring()str和unicode的超类不能直接调用可以用作isinstance判断format(value [, format_spec])格式化输出字符串格式化的参数顺序从0开始如“I am {0},I like {1}”unichr(i)返回给定int类型的unicodeenumerate(sequence [, start 0])返回一个可枚举的对象,该对象的next()方法将返回一个tupleiter(o[, sentinel])生成一个对象的迭代器第二个参数表示分隔符max(iterable[, args...][key])返回集合中的最大值min(iterable[, args...][key])返回集合中的最小值dict([arg])创建数据字典list([iterable])将一个集合类转换为另外一个集合类set()set对象实例化frozenset([iterable])产生一个不可变的setstr([object])转换为string类型sorted(iterable[, cmp[, key[, reverse]]])队集合排序tuple([iterable])生成一个tuple类型xrange([start], stop[, step])xrange()函数与range()类似但xrnage()并不创建列表而是返回一个xrange对象它的行为与列表相似但是只在需要时才计算列表值当列表很大时这个特性能为我们节省内存三、逻辑判断all(iterable)1、集合中的元素都为真的时候为真2、特别的若为空串返回为Trueany(iterable)1、集合中的元素有一个为真的时候为真2、特别的若为空串返回为Falsecmp(x, y)如果x y ,返回负数x y, 返回0x y,返回正数四、反射callable(object)检查对象object是否可调用1、类是可以被调用的2、实例是不可以被调用的除非类中声明了__call__方法classmethod()1、注解用来说明这个方式是个类方法2、类方法即可被类调用也可以被实例调用3、类方法类似于Java中的static方法4、类方法中不需要有self参数compile(source, filename, mode[, flags[, dont_inherit]])将source编译为代码或者AST对象。代码对象能够通过exec语句来执行或者eval()进行求值。1、参数source字符串或者AST(Abstract Syntax Trees)对象。2、参数 filename代码文件名称如果不是从文件读取代码则传递一些可辨认的值。3、参数model指定编译代码的种类。可以指定为 ‘exec’,’eval’,’single’。4、参数flag和dont_inherit这两个参数暂不介绍dir([object])1、不带参数时返回当前范围内的变量、方法和定义的类型列表2、带参数时返回参数的属性、方法列表。3、如果参数包含方法__dir__()该方法将被调用。当参数为实例时。4、如果参数不包含__dir__()该方法将最大限度地收集参数信息delattr(object, name)删除object对象名为name的属性eval(expression [, globals [, locals]])计算表达式expression的值execfile(filename [, globals [, locals]])用法类似exec()不同的是execfile的参数filename为文件名而exec的参数为字符串。filter(function, iterable)构造一个序列等价于[ item for item in iterable if function(item)]1、参数function返回值为True或False的函数可以为None2、参数iterable序列或可迭代对象getattr(object, name [, defalut])获取一个类的属性globals()返回一个描述当前全局符号表的字典hasattr(object, name)判断对象object是否包含名为name的特性hash(object)如果对象object为哈希表类型返回对象object的哈希值id(object)返回对象的唯一标识isinstance(object, classinfo)判断object是否是class的实例issubclass(class, classinfo)判断是否是子类len(s)返回集合长度locals()返回当前的变量列表map(function, iterable, ...)遍历每个元素执行function操作memoryview(obj)返回一个内存镜像类型的对象next(iterator[, default])类似于iterator.next()object()基类property([fget[, fset[, fdel[, doc]]]])属性访问的包装类设置后可以通过c.xvalue等来访问setter和getterreduce(function, iterable[, initializer])合并操作从第一个开始是前两个参数然后是前两个的结果与第三个合并进行处理以此类推reload(module)重新加载模块setattr(object, name, value)设置属性值repr(object)将一个对象变幻为可打印的格式slice()staticmethod声明静态方法是个注解super(type[, object-or-type])引用父类type(object)返回该object的类型vars([object])返回对象的变量若无参数与dict()方法类似bytearray([source [, encoding [, errors]]])返回一个byte数组1、如果source为整数则返回一个长度为source的初始化数组2、如果source为字符串则按照指定的encoding将字符串转换为字节序列3、如果source为可迭代类型则元素必须为[0 ,255]中的整数4、如果source为与buffer接口一致的对象则此对象也可以被用于初始化bytearray.zip([iterable, ...])实在是没有看懂只是看到了矩阵的变幻方面五、IO操作file(filename [, mode [, bufsize]])file类型的构造函数作用为打开一个文件如果文件不存在且mode为写或追加时文件将被创建。添加‘b’到mode参数中将对文件以二进制形式操作。添加‘’到mode参数中将允许对文件同时进行读写操作1、参数filename文件名称。2、参数mode‘r‘(读)、‘w‘(写)、‘a‘(追加)。3、参数bufsize如果为0表示不进行缓冲如果为1表示进行行缓冲如果是一个大于1的数表示缓冲区的大小 。input([prompt])获取用户输入推荐使用raw_input因为该函数将不会捕获用户的错误输入open(name[, mode[, buffering]])打开文件与file有什么不同推荐使用openprint打印函数raw_input([prompt])设置输入输入都是作为字符串处理其他help()--帮助信息后记内置函数一般都是因为使用频率比较频繁或是是元操作所以通过内置函数的形式提供出来通过对python的内置函数分类分析可以看出来基本的数据操作基本都是一些数学运算(当然除了加减乘除)、逻辑操作、集合操作、基本IO操作然后就是对于语言自身的反射操作还有就是字符串操作也是比较常用的尤其需要注意的是反射操作。