Python 抽象、函数

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]
range函数

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
View Code

 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]
View Code

(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']
View Code

(4) help 函数

help(math.sqrt)

# Help on built - in function sqrt in module math:
# sqrt(...)
#     sqrt(x)
# Return the square root of x.
View Code

(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, 陈玉莲
View Code

(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}
View Code

(7) 反转过程

## 反转过程
def add(x,y):
    return x+y

params = (1,2)
print(add(*params))
# 3
View Code

 (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模块可以非常有效地实现二元查找
View Code
原文地址:https://www.cnblogs.com/chenyanliang/p/7090592.html