python第六七章

range函数

>>> range(1,10)
[1, 2, 3, 4, 5, 6, 7, 8, 9]

Python的字典数据结构很特别,书上有,用的时候再说吧,不在这写了。

函数打印斐波那契数列,缩进形式编辑器自动,不是如下显示,

>>> def fib(n):
 "Print a Fibonacci series up to n"
 a,b=0,1
 while b<n:
  print b
  a,b=b,a+b

  
>>> fib(2000)
1
1
2
3
5
8
13
21
34
55
89
144
233
377
610
987
1597

在print语句后面加‘,’打印方式就不同了。

>>> def fib(n):
 "Print a Fibonacci series up to n"
 a,b=0,1
 while b<n:
  print b,
  a,b=b,a+b

  
>>> fib(2000)
1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597

Python在执行函数的时候会产生一个目前(local)的符号表(system table),用来记录函数中所有的local变量。目前觉得函数传参是传值。

当定义函数的时候,也就是在目前的system table里定义了这个函数的名称。对直译器来说,这个函数名称的数据类型是一个用户自定义的函数。

Python的procedure指的是没有返回值的函数。

>>> def fib(n):
 "return a Fibonacci series up to n"
 result=[]
 a,b=0,1
 while b<n:
  result.append(b)
  a,b=b,a+b
 return result

>>> f=fib(100)
>>> f
[1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89]
这里的缩进很有问题,程序源码和运行结果对着呢。

 

 

>>> def askok(prompt,retries=4,complaint="yes or no"):
 while 1:
  ok=raw_input(prompt)
  if ok in('y','ye','yes'):return 1
  if ok in ('n','no'):return 0
  retries=retries-1
  if retries<0:raise IOError,'refusenik user'
  print complaint

  
>>> askok('Do you really want to leave')
Do you really want to leavey
1
>>> askok('you really want to leave?',2)
you really want to leave?o
yes or no
you really want to leave?n
0
>>>

以上是定义了一个函数 ,用了prompt方法,接受输入,不过Python的函数参数居然可以不用按照顺序,这让人很惊讶。很神奇。

很抱歉,我很失误,前面的字符串是传给prompt方法的,后面的2可串可不传,不传就默认是4,参数顺序不能打乱。

 

>>> i=5
>>> def f(arg=i):print arg

>>> i=6
>>> f()
5
>>>

 

这段函数更有意思了,在函数定义时将i的值传给了函数,再改变i的值,函数参数值不变,这就是传值非传址的结果吧。

书上说传参是list或者dictionary类型时,问题就复杂了,那么咱们来看看吧。

 

>>> def f(a,l=[]):
 l.append(a)
 return l

>>> print f(1)
[1]
>>> print f(2)
[1, 2]
>>> print f(3)
[1, 2, 3]
>>>

 

以上就是将参数传给list l,顺便说一声,我看的书事电子版pdf,很模糊,调了好多次,

 

>>> def f(a,l=None):
 if l is None:
  l=[]
 l.append(a)
 return l

>>> f(1)
[1]
>>> f(2)
[2]
>>> f(3)
[3]
>>>

跟上次的程序区别就是l赋了初值,每次都判断。程序不难,主要记住Python的灵活,别让它的灵活带来麻烦。今天就这些吧。

转载于:https://www.cnblogs.com/ninahan0419/archive/2009/05/25/Python1.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值