python画梅花_Python学习笔记三:函数

1 #!/usr/bin/env python

2 #coding:utf-8

3

4 'a test module'

5

6 __author__ = 'Sunflower'

7

8

9 ## 一、基础函数

10 help(abs) #str是某种参数类型 R里面查看参数类型

11 cmp(1,2) #如果想x

12 #可以吧函数名赋予给变量

13 a =abs14 a(-1)15 #自定义 def 函数名(参数):

16 defmy_abs(x):17 if x>=0:18 return x #执行到return 函数结束

19 else:20 return -x21

22 #空函数

23 defnop():24 pass #可让代码跑起来

25

26 #参数检查

27 #1.个数不对 报错typeerror

28 #2.类型不对 (需要提前检查)

29 defmy_abs(x):30 if not isinstance(x, (int,float)): #检查是否为数字类

31 raise TypeError('bad operand type')32 if x>=0:33 returnx34 else:35 return -x36

37

38 import math

39 def move(x, y, step, angle=0):40 nx = x + step *math.cos(angle)41 ny = y - step *math.sin(angle)42 returnnx, ny43

44 r = move(100, 100, 60, math.pi / 6)45 print r #返回元组 tuple

46

47

50 ## 参数

51 #1. 默认参数 放后面 变化越小越放后面;按次序,

52 #2. 可变参数 加* 。 # 列表或者元组时也可以

53 def calc(*numbers):54 sum =055 for n innumbers:56 sum = sum + n *n57 returnsum58 #a = calc([1, 2, 3]) # 1.没有*时,函数需要先组成一个List或者tuple

59 a = calc(1,2,3) #2.加* 可变

60 nums = [1,2,3]61 a1 = calc(*nums) #3.在list前面加一个*解决list变可变

62 printa1

64 #3. 关键字参数

65 def person(name, age, **kw):66 print 'name:', name, 'age:', age, 'kw:', kw67 person('Ann', 30)68 person('Bob', 30, city='beijing') ##?? 中文时出错

69 kw = {'city':'beijing', 'job':'engineer'}70 person('Jack', 28, **kw) #多输入

71

72 def person(name, age, **kw):73 print 'name:', name, 'age:', age, 'kw:', kw74

75

76 names=['Bob','Amy']77 age=[23,30]78 city=['nanjing', 'beijing']79 job=['Math','Teacher']80 kw = {'city':city, 'job':job}81 print(kw)82 print(kw["city"])83 print(kw['city'][0],kw['job'][0]) #需要某一行数据??

84 for i in range(len(names)): #从0开始,小于len=2. range(0,2)=0,1 R 里面将1:20

85 person(names[i], age[i], kw={'city':city[i], 'job':job[i]}) ## 加入job???????

86 #或者

87 for name innames:88 i = names.index(name) #元组位置挑取list.index R里面which=

89 person(names[i], age[i], kw={'city':city[i], 'job':job[i]}) ## 加入job???????

90

91 #综合例子

92 def func(a, b, c=0, *args, **kw):93 print 'a =', a, 'b =', b, 'c =', c, 'args =', args, 'kw =', kw #加括号和不加不一样??

94 func(1, 2, 3)95 func(1, 2, 3, 'a', 'b')96 func(1, 2, 3, 'a', 'b', high=99)97

98 args = [1,2,3,'a', 'b']99 kw = {'high':99}100 func(*args, **kw)101

102

103 #递归函数 函数内部调用自身

104 deffact(n):105 if n==1:106 return 1

107 return n * fact(n-1)108 f = fact(1)109 print(f)110

111 #为了防止栈溢出,改成尾递归方式

112 deffact(n):113 return fact_inter(n, 1)114 deffact_inter(num, product):115 if num == 1:116 returnproduct117 return fact_inter(num -1, num *product)118

119 print(fact(5))120

121

122

123 ## 高阶函数

124 #map 相当于映射(函数,序列) 返回list

125 deff(x):126 return x *x127 #计算平方

128 L =[]129 for n in [1, 2, 3, 4, 5, 6, 7]:130 L.append(f(n))131 printL132 print(map(f, [1,2,3,4,5,6,7])) #改为map形式 # 1.map()

133 print(map(str,[1,2,3,4,5])) #输出字符串形式

134

135 #reduce 把计算结果和序列下一个元素计算

136 deffn(x, y):137 return x * 10 +y138 print(reduce(fn,[1, 3, 5, 7])) #2.reduce()

139

140 #名字首字母大写

141 #方法一

142 defchange(name):143 return name.capitalize() #capitalize()

144 names = ['adam', 'LISE', 'barT']145 change_name =map(change, names)146 print(change_name)147 #方法二

148 defchange(name):149 return name[:1].upper() + name[1:].lower() #.upper() .lower()

150 names = ['adam', 'LISE', 'barT']151 change_name =map(change, names)152 print(change_name)153

154 #累计求积

155 defprod(t):156 ifisinstance(t,list):157 return reduce(lambda x,y: x*y, t) #3.lambda()

158 else:159 pass

160 t = [1,2,3,10]161 printprod(t)162

163 print reduce(lambda x,y:x*y, [1,2,3,10])164

165

166 #filter 过滤序列

167 def is_odd(n): #删除偶数

168 return n % 2 ==1

169 filter(is_odd, [1,2,3,4,6,8,9]) #4.filter

170

171 #素数

172 defis_prime(n):173 if n < 2:174 returnFalse175 for i in range(2, n):176 if n % i ==0:177 returnFalse178 returnTrue179 print filter(is_prime, range(1,101))180

181 #删除空格

182 defnot_empty(s):183 return s ands.strip()184 f = filter(not_empty, ['a', ' ', '', None, 'C'] ##???????????

185 print(f)186

187 #sorted

188 L = [36, 5, 1, 23]189 print(sorted(L)) #顺序 # 5.sorted

190 #倒序

191 defreversed_cmp(x, y):192 if x >y:193 return -1

194 if x <195 return>

196 return0197 print(sorted(L, reversed_cmp)) #倒序

198 #大小写

199 L1 = ['Bob', 'Zoo', 'ann']200 print(sorted(L1)) #排序,且大写在前

201 defcmp_ignore_case(s1,s2):202 u1 =s1.upper()203 u2 =s2.upper()204 if u1 <205 return>

206 if u1 >u2:207 return 1

208 return0209 print(sorted(L1, cmp_ignore_case)) #忽视大小写

210

211 #返回函数

212 def calc_sum(*args):213 ax =0214 for n inargs:215 ax = ax +n216 returnax217

218 def lazy_sum(*args):219 defsum():220 ax =0221 for n inargs:222 ax = ax +n223 returnax224 returnsum225 f = lazy_sum(1, 3, 5, 7)226 print(f) #函数

227 f()228 print(f()) #结果

229

230 #闭包

231 defcount():232 fs =[]233 for i in range(1, 4):234 deff():235 return i*i236 fs.append(f)237 returnfs238 f1, f2, f3 =count()239 print(f1())240 print(f2())241 print(f3())242 ## 上面结果全为9, 返回函数不要引用任何循环变量,

243 #修改 需要创建一个函数,用该函数的参数绑定循环变量当前值,无论后续如何修改,已绑定的值不变

244 defcount():245 fs =[]246 for i in range(1, 4):247 deff(j):248 defg():249 return j*j250 returng251 fs.append(f(i))252 returnfs253 f1, f2, f3 =count()254 print(f1())255 print(f2())256 print(f3())257

258 #匿名函数 不需要显式的定义函数,直接传入匿名函数更方便

259 map(lambda x: x * x, [1, 2, 3, 4, 5, 6, 7, 8, 9]260

261

262 #装饰器 #???

263 defnow():264 print '2016-12-25'

265

266 f =now267 print(f())268

269 print(now.__name__) #拿到函数名字

270

271

272 deflog(func):273 def wrapper(*args, **kw):274 print 'call %s():' % func.__name__

275 return func(*args, **kw)276 returnwrapper277 @log278

279 #偏函数

280 def int2(x, base=2):281 returnint(x, base)282 print(int2('1000000'))283 #创建偏函数的写法 functools.partial作用:把默写参数给固定住(设置默认值)

284 importfunctools285 int2 = functools.partial(int, base=2)286 print(int2('1000000'))

205>195>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值