• 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
  • 相关阅读:
    pm2中文文档
    大前端技能图谱
    手把手教你用express搭建个人博客(二)
    javascript this讲解
    手把手教你用express搭建个人博客(一)
    使用国内手机号注册Google帐号的方法(2020-12-13亲测有效)
    常见浏览器修改User-Agent的方法
    Debian 9 Stretch国内常用镜像源
    Nginx核心模块内置变量
    tmux基本操作
  • 原文地址:https://www.cnblogs.com/chenyanliang/p/7090592.html
Copyright © 2020-2023  润新知