think python学习笔记(3)

组合
编辑语言最有用的特征之一,是能够将小块的构建材料组合在一起。例如,函数的实参可以是任意类型的表达式,包括算数运算符,也可以是函数调用

x = math.sin(degrees/360.0*2*math.pi)
x = math.exp(math.log(x+1))

几乎所有可以放值的地方都可以放一个任意类型的表达式,只有一个例外
赋值语句的左侧必须是一个变量名,左侧放其他任何表达式都会产生语法错误

新建函数
一个函数的定义,指定了新函数的名称以及当函数被调用时执行的语句序列

def myprint():
	print("hello world")

def关键字标明是函数定义,函数名是myprint
函数定义的第一行被称作函数头,其余部分被称作函数体,函数头必须以冒号结尾,函数体必须缩进。
单引号和双引号的作用相同,当字符串中存在单引号时,只能使用双引号
如果在交互模式下键入函数定义,每空一行解释器就会打印三个据点,让你知道定义并没有结束
为了结束定义,必须输入一个空行
定义一个函数会创建一个函数对象,其类型是function

一旦定义了一个函数就可以在另一个函数中使用它

def repeat():
	myprint()

定义和使用
函数定义作用是创建函数对选哪个,函数内部的语句在函数被调用之前是不会被识别的,函数定义不会产生任何输出

函数定义必须在函数第一次被调用之前执行

执行流程:
语句执行的顺序

形参和实参
在函数内部,实参被赋给称作形参的变量

def myprint(a):
	print(a)
myprint(3)
#3就是实参,a是形参	
myprint('a'*4)
#组合规则

变量和形参都是局部的
当在函数里创建变量是,这个变量是局部的,也就是说它只在函数内部存在

堆栈图
用于跟踪哪个变量在哪能用
每个函数用一个栈帧表示
函数调用发生错误是,python会打印出错函数的名字以及调用它的函数的名字,一直追溯到main为止
打印出的函数列表被称为回溯,它会告诉你发生错误的是哪个程序文件,错误在哪一行,以及当时正在执行的函数,它还会显示引起错误的那一行代码
回溯中的函数顺序,与堆栈图中的函数顺序一致,出错是正在运行的内个函数则位于回溯信息的底部

有返回值函数和无返回值函数
如果试图将无返回值函数的结果赋给一个变量,会得到一个被称作None的特殊值
None是一个有自己独立类型的特殊值

1.python提供了一个内置函数,叫len,可以返回一个字符串的长度
2.print函数默认会自动转行,但是在行尾加一个空格就可以阻止

print('+',end=' ')

案例研究:接口设计
turtle模块

import turtle
bob = turtle.Turtle()
#导入turtle模块
print(bob)
turtle.mainloop()

turtle模块提供了一个叫做Turtle的函数,这个函数会创建一个Turtle对象,我们将其赋值给名为bob的变量
bob指向一个Turtle类型的对选哪个这个类型是由turtle模块定义的

创建一个Turtle对象之后,可以调用方法,来在窗口移动该对象
例,让海龟向前走

bob.fd(100)

fd方法的实参是像素距离,所以前进的距离取决于屏幕
Turtle对象中能调用的其他方法还包括,让它向后走的bk,向左转的lt,向右转的rt。lt和rt这两个方法接受的实参是角度
另外每个Turtle都握着一支笔,不是落笔就是抬笔,如果落笔了,Turtle就会在移动时留下痕迹。pu和pd这两个方法就分别代表了抬笔和落笔
如果要画一个直角

bob.fd(100)
bob.lt(90)
bob.fd(100)

利用for语句更加简洁的完成任务

for i in range(4):
	print(1)
#用for循环实现画一个正方形
for i in range(4):
	bob.fd(100)
	bob.lt(90)	

for语句的语法和函数定义类似。它有一个以冒号结尾的语句头一个一个缩进的语句体。语句体可以包含任意条语句
for语句有时也被称为循环,因为执行流程会贯穿整个语句体,然后再循环回顶部。

封装

def square(t):
	for i in range(4):
	t.fd(100)
	t.lt(90)

square(bob)	

泛化
给函数square增加一个length形参

def square(t,length):
	for i in range(4):
		t.fd(length)
		t.lt(90)

square(bob,100)		

给函数增加一个形参被称为泛化,因为这使得函数更加的通用,增加length之后就可以改变画出的正方形的大小

画任意多边形

def polygon(t,n,length):
	angle = 360/n
	for i in range(n):
		t.fd(length)
		t.lt(angle)

polygon(bob,7,70)

如果一个函数有多个数字形参,很容易忘记顺序,可以将形参名加入实参列表

polygon(bob,n=7,length=70)

这些被称为关键字实参,因为加入了形参名

接口设计

import math
def circle(t,r):
	circumference = 2*math.pi*r
	n = 50
	length = circumference / n
	polygon(t,n,length)

函数第一行通过半径计算周长,然后计算每一边的边长,画出五十边型,近似为圆
但是n是一个固定的值,不能适应r的变化,但是n不适合作为画圆的接口,所以在函数内利用周长选择一个合适的n值

def circle(t,r):
	circumference = 2*math.pi*r
	n = int(circumference/3) + 1
	length = circumference / n
	polygon(t,n,length)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值