zoukankan      html  css  js  c++  java
  • 八、python函数调用/作用域

    一、函数的相互调用

    def eat(name,food):
        print('{}喜欢吃的食物:{}'.format(name,food))
    
    def congratulate(offer_name,money):
        '''庆祝拿到offer'''
        print('{}拿到了{}元的offer'.format(offer_name,money))
        eat(offer_name,'小龙虾')
    congratulate('zjx',8000)
    '''
    zjx拿到了8000元的offer
    zjx喜欢吃的食物:小龙虾
    '''

    注意:调用函数的时候必须先定义

         函数不要相互调用,相互调用会导致递归错误,内存有限,一直循环,内存会爆掉

         函数不要自己调用自己,否则也会导致递归错误

    1)调用函数的时候必须先定义
    def
    congratulate(offer_name,money): '''庆祝拿到offer''' print('{}拿到了{}元的offer'.format(offer_name,money)) eat(offer_name,'小龙虾') congratulate('zjx',8000) def eat(name,food): print('{}喜欢吃的食物:{}'.format(name,food)) ''' zjx拿到了8000元的offer NameError: name 'eat' is not defined '''
    3)函数不要自己调用自己
    def
    get_money(date): print('去讨薪') get_money(date) print(get_money(8)) #死循环
    2)函数不要相互调用
    def
    get_money(date): print(date) get_name('yuz') def get_name(name): print(name) get_money(7)

    二、函数的作用域

    全局变量:整个文件都可以共用的,在函数体外面的

    局部变量:在函数体这个局部里面

    def add(a,b):
        c = a + b
        print('函数里面的c={}'.format(c))
        return c
    c = 4
    print('函数外面的c={}'.format(c))
    add(5,8)
    
    '''
    函数外面的c=4
    函数里面的c=13
    '''

    全局能获取局部变量吗?-------不能

    全局能修改局部变量吗?--------不能

    局部作用域能获取全局变量吗?--------能

    局部作用域能修改全局变量吗?------能(前提是加global)

    1) 全局作用域不能获取局部变量
    defadd(a,b):
        c = a + b
        c += 5
        return c
    c = 4
    add(5,8)
    print(c)   #4
    2)局部作用域能获取全局变量
    c = 8
    def add(a,b):
      return a+b+c
    print(add(2,4))  # 14
    3)局部作用域修改全局变量
    c = 4
    def add(a,b):
        global c
        c = c + 4
        print(c) 
    add(2,4)
    print('最后的c是{}'.format(c))  # 8

    注意:不加global 表明是全局变量,局部是不能修改全局变量的

          如果想在局部去修改全局变量,加global 表明这是一个全局变量

    三、为什么要使用函数

    当你发现你在复制粘贴相同的或者类似的代码的时候,那么,极有可能你需要定义一个函数,会把同样的一段代码存储到函数当中,这样的过程就是封装

    封装成函数—》把一段代码存储到函数当中

    函数的作用:存储一段程序(有长有短),为了重复利用,不需要复制粘贴了

    四、内置函数

    abs():返回数字的绝对值
    dict():用于创建一个字典
    min():返回给定参数的最小值,参数可以为序列
    max():返回给定参数的最大值,参数可以为序列
    sorted():对所有可迭代的对象进行排序操作
    input():接收一个标准输入数据,返回为string类型
    eval():用来进行一个字符串表达式,并返回表达式的值
    int():用于将一个字符串或数字转换为整型
    open():用于打开一个文件,并返回文件对象,在对文件进行处理过程都需要使用到这个函数,如果该文件无法被打开,会抛出OSError
    str():将对象转化为适于人阅读的形式
    bool():用于将给定参数转换为布尔类型,如果没有参数,返回False
    sum():对序列进行求和计算
    float():用于将整数和字符串转换成浮点数
    print():用于打印输出,最常见的一个函数
    tuple():将可迭代序列转换为元组
    format():格式化字符串的函数,增强字符串格式化的功能
    len():返回对象长度或项目个数
    type():如果只有第一个参数则返回对象的类型,三个参数返回新的类型对象
    list():用于将元组或字符串转换为列表
    range():返回的是一个可迭代对象(类型是对象),而不是列表类型,所以打印的时候不会打印列表
    set():创建一个无序不重复元素集,可进行关系测试,删除重复数据,还可以计算交集、差集、并集等
    enumerate():用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在for循环当中
    不是内置函数:isdigtal():检测字符串是否只由数字组成,返回为布尔类型

    sort–排序,没有返回值,只是修改了原列表

    lst = [1,4,7,2,9,8]
    new_lst = lst.sort()
    print(new_lst)   #sort()函数没有返回值 
    print(lst)
    
    '''
    None [1, 2, 4, 7, 8, 9]
    '''

    sorted()返回的是一个新的列表,原列表没有变化

    lst = [1,4,7,2,9,8]
    print(sorted(lst))
    print(lst)
    '''
    [1, 2, 4, 7, 8, 9]
    [1, 4, 7, 2, 9, 8]
    '''

    enumerate() 枚举,可以同时获取索引和值,输出形式为元组

    lst = [1,5,3,7,8,2]
    for i in enumerate(lst):
        print(i)
    '''
    (0, 1)
    (1, 5)
    (2, 3)
    (3, 7)
    (4, 8)
    (5, 2)
    '''

    enumerate() 枚举,可以用两个变量来接收

    lst = [1,5,3,7,8,2]
    for i,v in enumerate(lst): #两个值就是元组的解包
        print(i,v)
    '''
    0 1
    1 5
    2 3
    3 7
    4 8
    5 2
    '''

    eval() 执行一个字符串表达式,并返回表达式的值

    a = '1 + 2'
    print(a)
    print(eval(a))
    '''
    1 + 2
    3
    '''
  • 相关阅读:
    正则匹配
    curator.zookeeper
    linux tail 命令查看日志 并加上颜色
    k8s一些命令
    k8s文件传递及scp
    Linux下如何在不解压jar包查看或修改配置文件
    MySQL教程之concat以及group_concat的用法
    JavaCV读取流设置超时
    学习html5 canvas 圆环
    jquery使用$.each()
  • 原文地址:https://www.cnblogs.com/zhangjx2457/p/13628526.html
Copyright © 2011-2022 走看看