进阶 第二课:函数(第二节)
1. 习题问题的总结 (1) 不要讲问题复杂化, 越简单越好 (2) 自己要测试。多测试,测试要完整(类型测试和内容测试) # -*- coding=utf-8 -*- # 习题: # 1.定义一个方法 func,该func可以引入任意多的整型参数,结果返回其中最大与最小的值。 def f_max(*kr): a = kr[0] for i in kr: if isinstance(i,int): if a <= i: a = i else: pass else: return 'kr is contain not integer cells' return a print f_max(1,2,3,4) # 找到最大值和最小值 def fun_max_min(*num): for i in num: if not isinstance(i, int): pass else: return '请输入整型数字' a = sorted(num) return "maxinum is %d and mininum is %d" % (a[-1],a[0]) print fun_max_min(1,2,3,4) #老师点评:可以用filter对数据进行过滤,然后取出最大值和最小值
def fun_max_min(*num):
num_int = filter(lambda x: isinstance(x, int), num)
a = sorted(num_int)
return "maxinum is %d and mininum is %d" % (a[-1],a[0])
print fun_max_min(1,2,3,4,'a','b')
# 2.定义一个方法func,该func可以引入任意多的字符串参数,结果返回(长度)最长的字符串。 def str_len(*kr): lens = 0 max_str = '' for i in kr: if isinstance(i, str): if lens <= len(i): lens = len(i) max_str = i else: pass else: return 'the input contain not str cells' return i print str_len('asd','asdas','sfdfasdsdfsd',345322) # 方法二: def str_maxlen(*sen): for i in sen: if isinstance(i,str): pass else: return '请输入字符串' a = sorted(sen,key=lambda k:len(k), reverse=True) return 'maxinum len string is %s' % a[0] print str_maxlen('asd','asdas','sfdfasdsdfsd') # 3.定义一个方法get_doc(module),module参数为该脚本中导入或定义的模块对象,该函数返回module的帮助文档。 # 例 print get_doc(urllib),则会输出urllib这个模块的帮助文档。 def get_doc(str1): return help(str1) get_doc("urllib") # 方法二: import os def get_doc2(str1): a = 'pydoc %s' % str1 m = os.popen("python -m %s" % a).read() return m print get_doc2("str") # prinnt参数里面一定要加引号 # 4.定义一个方法get_text(f),f参数为任意一个文件的磁盘路径,该函数返回f文件的内容。 import os def get_text(str1): if os.path.exists(f): with open(str1,'r') as g: return g.read() else: return "没有这个文件" get_text('d:/ttt.txt') # 5.定义一个方法get_dir(folder),folder参数为任意一个文件夹,该函数返回folder文件夹的文件列表。提示(可以了解python的glob模块) import glob a = [] def get_dir(dir1): a = glob.glob(dir1+"*") return [a[i].decode('gbk') for i in range(len(a))] a = get_dir("D:/") for i in a: print i 2. 怎么去学习使用函数 (1) 别管那么多复杂的, 先直接把功能实现了 (2) 抽象成函数:命名规范, 伪代码, 参数默认值 (3) 将函数变得更加健壮, 让他可以跑很多地方. 1) 假设你写的函数是要交给你的基友用 -> 功能完整 2) 假设你写函数是交给你的学弟用 -> 异常处理完善 (4) 测试 1) asset 2) 对函数的反馈值进行一个值和类型的测试 3)单元测试 def func1(): pass 命名规范: 下划线命名法:get_doc_from_url() 驼峰命名法: GetDocFromUrl() 为什么要用默认值: 1. 更省事 2. 更可配置