网站建设怎么报价表,请写出网站建设的整个过程,做电工的有接单的网站吗,对于网站链接优化有哪些建议关于函数的事情#xff0c;总是说不完的#xff0c;下面就罗列一些编写函数的注意事项。特别声明#xff0c;这些事项不是我总结的#xff0c;我是从一本名字为《Learning Python》的书里面抄过来的#xff0c;顺便写成了汉语#xff0c;当然#xff0c;是按照自己的视角…关于函数的事情总是说不完的下面就罗列一些编写函数的注意事项。特别声明这些事项不是我总结的我是从一本名字为《Learning Python》的书里面抄过来的顺便写成了汉语当然是按照自己的视角翻译的里面也夹杂了一些自己的观点。看官也可以理解为源于《Learning Python》但又有点儿不同。•函数具有独立性。也就是常说的不要有太强的耦合性。要让函数能够独立于外部的东西。参数和return语句就是实现这种独立性的最好方法。•尽量不要使用全局变量这也是让函数具有低耦合度的方法。全局变量虽然进行了函数内外通信但是它强化了函数对外部的依赖常常让函数的修改和程序调试比较麻烦。•如果参数的对象是可变类型的数据在函数中不要做对它的修改操作。当然更多时候参数传入的最好是不可变的。•函数实现的功能和目标要单一化。每个函数的开头都要有简短的一句话来说明本函数的功能和目标。•函数不要太大能小则小根据前一条的原则功能目标单一则代码条数就小了。如果感觉有点大看看能不能拆解开分别为几个函数。•不要修改另外一个模块文件中的变量。这跟前面的道理是一样的目的是降低耦合性。小试一下递归对于在python中使用递归我一项持谨慎态度能不用就不用为什么呢一方面深恐自己学艺不精另外递归不仅消耗资源而且很多时候速度也不如for循环快。不过做为程序员递归还是需要了解的。这里就列举一个简单的例子。 def newsum(lst):... if not lst:... return 0... else:... return lst[0] newsum(lst[1:])... newsum([1,2,3])6这是一个对list进行求和的函数(看官可能想到了不是在python中有一个sum内置函数来求和么为什么要自己写呢是的在实际的编程中没有必要自己写用sum就可以了。这里用这个例子纯粹是为了说明递归没有编程实践的意义)当然我没有判断传给函数的参数是否为完全由数字组成的list所以如果输入的list中字母就会编程这样了 newsum([1,2,3,q])Traceback (most recent call last):File , line 1, in File , line 5, in newsumFile , line 5, in newsumFile , line 5, in newsumFile , line 5, in newsumTypeError: cannot concatenate str and int objects这就是本函数的缺憾了。但是为了说明递归我们就顾不了这么多了。暂且忽略这个缺憾。看官注意上面的函数中有一句return lst(0)newsum(lst[1:])在这句话中又调用了一边函数本身。对了这就递归在函数中调用本函数自己。当然区别在于传入的参数有变化了。为了清除函数的调用流程我们可以将每次传入的参数打印出来 def newsum(lst):... print lst... if not lst:... return 0... else:... return lst[0] newsum(lst[1:])... newsum([1,2,3])[1, 2, 3][2, 3][3][]6这就是递归了。其实看官或许已经想到了即使不用sum也可以用for来事项上述操作。 lst [1,2,3] sum_result 0 for x in lst: sum_result x... sum_result6铭记函数是对象还记得在第一部分学习的时候不断强调的变量无类型数据有类型那时候遇到的数据包括字符串、数值、列表、元组、字典、文件这些东西都被视为对象。函数跟它们类似也是对象。因此就可以像以前的对象一样进行赋值、传递给其它函数、嵌入到数据结构、从一个函数返回给另一个函数等等面向对象的操作。当然函数这个对象也有特殊性就是它可以由一个函数表达式后面的括号中的列表参数调用。 def newsum(lst): #依然以这个递归的函数为例... print lst... if not lst:... return 0... else:... return lst[0] newsum(lst[1:])... lst [1,2,3] newsum(lst) #这是前面已经常用的方法[1, 2, 3][2, 3][3][]6 recusion_fun newsum #通过赋值语句让变量recusion_fun也引用了函数newsum(lst)对象 recusion_fun(lst) #从而变量能够实现等同函数调用的操作[1, 2, 3][2, 3][3][]6再看一个例子在这个例子中一定要谨记函数是对象。看官曾记否在list中可以容纳任何对象那么是否能够容纳一个函数中呢 fun_list [(newsum,[1,2,3]),(newsum,[1,2,3,4,5])] for fun,arg in fun_list:... fun(arg)...[1, 2, 3][2, 3][3][]6[1, 2, 3, 4, 5][2, 3, 4, 5][3, 4, 5][4, 5][5][]15函数真的就是对象啊。既然是对象就可以用dir(object)方式查看有关信息喽 dir(newsum)[__call__, __class__, __closure__, __code__, __defaults__, __delattr__, __dict__, __doc__, __format__, __get__, __getattribute__, __globals__, __hash__, __init__, __module__, __name__, __new__, __reduce__, __reduce_ex__, __repr__, __setattr__, __sizeof__, __str__, __subclasshook__, func_closure, func_code, func_defaults, func_dict, func_doc, func_globals, func_name] dir(newsum.__code__)[__class__, __cmp__, __delattr__, __doc__, __eq__, __format__, __ge__, __getattribute__, __gt__, __hash__, __init__, __le__, __lt__, __ne__, __new__, __reduce__, __reduce_ex__, __repr__, __setattr__, __sizeof__, __str__, __subclasshook__, co_argcount, co_cellvars, co_code, co_consts, co_filename, co_firstlineno, co_flags, co_freevars, co_lnotab, co_name, co_names, co_nlocals, co_stacksize, co_varnames] newsum.__code__.__doc__code(argcount, nlocals, stacksize, flags, codestring, constants, names,\n varnames, filename, name, firstlineno, lnotab[, freevars[, cellvars]])\n\nCreate a code object. Not for the faint of heart. newsum.__code__.co_varnames(lst,) newsum.__code__.co_argcount1所以各位看官在使用函数的时候首先要把它放在对象的层面考量它不是什么特殊的东西尽管我们使用了不少篇幅讲述它但它终归还是一个对象。