1、range函数的用法

## range 创建整数序列 for i in range(5): print(i,end=',') print() # 0,1,2,3,4, # range(1,5) # 表示从1到5(不包含5)的序列 # [1,2,3,4] # range(1,5,2) # 代表1到5,间隔为2(不包含5) # [1,3] # range(5) # 表示从0到5(不包含5) # [0,1,2,3,4]
2、斐波那契数列、冒泡排序和交换两个值

## 斐波那契数列 fibs = [0,1] for i in range(8): fibs.append(fibs[-2] + fibs[-1]) print(fibs) # [0, 1, 1, 2, 3, 5, 8, 13, 21, 34] ## 冒泡 array = [7,4,5,8,1,0,3,9,2,6] for i in range(len(array)-1,0,-1): for j in range(0,i): if array[j] > array[j+1]: array[j],array[j+1] = array[j+1],array[j] print(array) # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] ## 交换两个值 a = 5 b = 10 a,b = b,a print("a = %i" % a) print("b = %i" % b) # a = 10 # b = 5
3、使用 def 定义函数。如果在函数的开头写下字符串,它就会作为函数的一部分进行存储,这称为文档字符串。
使用内建 help 函数,在解释器中可以得到关于函数(包含它的文档字符串)的信息
写在def语句中函数名后面的变量通常叫做函数的形式参数,而调用函数时提供的值是实际参数
参数存储在局部作用域(local scope)内
字符串以及数字和元组是不可变的,即无法被修改只能用新值覆盖
4、函数
(1) 函数的使用

## 创建函数 import math x = 1 y = math.sqrt print(callable(x)) # False print(callable(y)) # True ## 定义函数和使用 def hello(name): return 'Hello, ' + name + '!' print(hello('cyl')) # Hello, cyl!
(2) 使用函数定义斐波那契

## 使用函数定义斐波那契 def fibs(num): '函数注释' result = [0,1] for i in range(num-2): result.append(result[-2] + result[-1]) return result print(fibs(15)) # [0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377]
(3) 位置参数

## 位置参数 def try_to_change(n): n = 'MR.Gumby' name = 'Mrs.Entity' try_to_change(name) print(name) # Mrs.Entity def change(n): n[0] = 100 nums = [1,2,3] change(nums) print(nums) # [100, 2, 3] def init(data): data['first'] = {} data['middle'] = {} data['last'] = {} def lookup(data,label,name): return data[label].get(name) def store(data,full_name): names = full_name.split() if len(names) == 2:names.insert(1,'') labels = 'first','middle','last' for label,name in zip(labels,names): people = lookup(data,label,name) if people: people.append(full_name) else: data[label][name] = [full_name] MyNames = {} init(MyNames) store(MyNames,'Magnus Lie Hetland') store(MyNames,'Tom Lie Duncon') store(MyNames,'Tom Fge Duncon') print(lookup(MyNames,'middle','Lie')) # ['Magnus Lie Hetland', 'Tom Lie Duncon']
(4) help 函数

help(math.sqrt) # Help on built - in function sqrt in module math: # sqrt(...) # sqrt(x) # Return the square root of x.
(5) 关键字参数

## 关键字参数 def hello_2(name,greeting): print('%s, %s' % (greeting,name)) hello_2(greeting='hello',name='CYL') # hello, CYL def hello_3(name='默认名',greeting='欢迎'): print('%s, %s' % (greeting,name)) hello_3() # 欢迎, 默认名 hello_3('陈玉莲','welcome') # welcome, 陈玉莲
(6) 多参数

## 收集参数,多参数 def print_params(*params): print(params) print_params('Testing') # ('Testing',) # 以元组的方式打印出来 print_params(1,2,3) # (1, 2, 3) def print_params_1(**params): print(params) print_params_1(x=1,y=2,z=3) # {'x': 1, 'y': 2, 'z': 3} 数组 def print_params_2(x,y,z=3,*pospar,**keypar): print(x,y,z) print(pospar) print(keypar) print_params_2(1,2,4,5,6,7,foo=1,bar=2) # 1 2 4 # (5, 6, 7) # {'foo': 1, 'bar': 2}
(7) 反转过程

## 反转过程 def add(x,y): return x+y params = (1,2) print(add(*params)) # 3
(8) 递归

## 递归 # 两个经典例子:阶乘和幂 # n的阶乘 n x (n-1) x (n-2) x...x 1 def factorial(n): result = n for i in range(1,n): result *= i return result; print(factorial(4)) # 24 print(factorial(5)) # 120 def factorial2(n): if n == 1: return 1 else: return n * factorial2(n-1) print(factorial2(4)) # 24 print(factorial2(5)) # 120 def power(x,n): if n==0: return 1 else: return x * power(x,n-1) print(power(2,3)) # 8 print(power(3,4)) # 81 ## 二元查找(binary search) def search(sequence,number,lower=0,upper=None): if upper is None: upper = len(sequence)-1 if lower == upper: assert number == sequence[upper] return upper else: middle = (lower + upper) // 2 if number > sequence[middle]: return search(sequence,number,middle+1,upper) else: return search(sequence,number,lower,middle) seq = [34,67,8,123,4,100,95] seq.sort() print(seq) # [4, 8, 34, 67, 95, 100, 123] print(search(seq,34)) # 2 print(search(seq,123)) # 6 # 标准库中的 bisect模块可以非常有效地实现二元查找