zoukankan      html  css  js  c++  java
  • 函数定义及调用

    Python 函数
    函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。
    函数能提高应用的模块性,和代码的重复利用率。你已经知道Python提供了许多内建函数,比如print()。但你也可以自己创建函数,这被叫做用户自定义函数。
     
    定义一个函数
    你可以定义一个由自己想要功能的函数,以下是简单的规则:
    • 函数代码块以 def 关键词开头,后接函数标识符名称和圆括号()。
    • 任何传入参数和自变量必须放在圆括号中间。圆括号之间可以用于定义参数。
    • 函数的第一行语句可以选择性地使用文档字符串—用于存放函数说明。
    • 函数内容以冒号起始,并且缩进。
    • return [表达式] 结束函数,选择性地返回一个值给调用方。不带表达式的return相当于返回 None。
    函数分为两个阶段:    1.定义阶段
                                     2.调用阶段
    print(func) 查看函数内存地址
     
    # 函数的内存地址加上()就是调用
    # 函数即变量(不要出去乱说)
    # 函数调用才会执行函数体代码
    # 1次定义多次调用
     
    # def func(name,age):       # name,age 代表形参
          print('my name is %s,my age is %s' % (name,age))
        func('吉喆',23)               #吉喆,23代表实参,当有俩个形参时必须有俩个实参对应
     
    #*args当函数有多个参数时,可以考虑用*args,不可以用关键字传参,且一次只能调用一个参数,不可同时调用多个,调用完成后是元组形式,例如:
    # def func(*args):
          print(args[0])                #[0] 为调用下标为0所传实参中的内容
          print(args[1])
          print(args[2])
    func('aaa','bbb','ccc')
    (aaa,bbb,ccc)
     
    #**kwargs当函数有多个参数时,可以考虑用**kwargs,可以用关键字传参(以字典形式),不可以直接传参
    # def func(**kwargs):
         print(kwargs)
    func(name='吉喆',age='23')
     
    #*args和**kwargs可以联合使用
    # def func(*args,**kwargs):
         print(args)
         print(kwargs)
    # func('aaa','name'='root','bbb','age'=23)
    或:
    def func(*args,**kwargs):
         print(kwargs)
         print(args[1])
         print(args[2])
    func('aaa','bbb','ccc',
         name=123,
         age=12,
         power='qq')
    {'name': 123, 'age': 12, 'power': 'qq'}
    bbb
    ccc
     
     
    def ChangeInt(a):
        a = 10
    b = 2
    ChangeInt(b)
    print(b)
     
    def changeme(mylist):
        "修改传入的列表"
        mylist.append([1, 2, 3, 4])
        print("函数内取值: ", mylist)
        return

    # 调用changeme函数
    mylist = [10, 20, 30]
    changeme(mylist)
    print("函数外取值: ", mylist)
    def printme(str):
        "打印任何传入的字符串"
        print(str)
        return

    # 调用printme函数
    printme(str="My string")
    # 可写函数说明

    def printinfo(name, age):
        "打印任何传入的字符串"
        print("Name: ", name)
        print("Age ", age)
        return
    # 调用printinfo函数
    printinfo(age=50, name="miki");
     
    def printinfo(args,*vartuple):
        "打印任何传入的参数"
        print(args)
        for var in vartuple:
            print(var)
        return
    # 调用printinfo 函数
    printinfo(10)
    printinfo(70, 60, 50)
    实参和形参
    #定义函数括号里的一般叫形参
    #调用时括号里传递的参数一般叫实参
    #比如:
    def students(age):
        print('my age is %s' % age)

    students(18)

    age就是形参,18就是实参
    参数的具体应用
    '''
    1、位置参数:按照从左到右的顺序定义的参数
            位置形参:必选参数
            位置实参:按照位置给形参传值
    '''
    def foo(x,y):
        print(x,y)
    foo(1,2)
    #结果:1,2
           
    '''
    2、关键字参数:按照key=value的形式定义的实参
            无需按照位置为形参传值
            注意的问题:
                    1. 关键字实参必须在位置实参右面
                    2. 对同一个形参不能重复传值

    def foo(x,y):
        print(x,y)
    foo(y=2,x=1)
    结果:1,2

    3、默认参数:形参在定义时就已经为其赋值
            可以传值也可以不传值,经常需要变的参数定义成位置形参,变化较小的参数定义成默认参数(形参)
            注意的问题:
                    1. 只在定义时赋值一次
                    2. 默认参数的定义应该在位置形参右面
                    3. 默认参数通常应该定义成不可变类型

    def foo(x,y=2):
        print(x,y)
    foo(1)
    #结果:1,2
    foo(1,3)
    #结果:1,3


    4、可变长参数:
            可变长指的是实参值的个数不固定
            而实参有按位置和按关键字两种形式定义,针对这两种形式的可变长,形参对应有两种解决方案来完整地存放它们,分别是*args和**kwargs
    '''

    #*args:传递的参数会变成元组
    def foo(x,y,*args):
        print(x,y,args)
    foo(1,2,3)
    #结果:1 2 (3,)
    #**kwargs:传递的参数会变成字典

    def foo(x,y,**kwargs):
        print(x,y,kwargs)
    foo(1,2,a=3,b=4)
    #结果:1 2 {'a': 3, 'b': 4}
     
    return 语句
    return它是函数执行结果的返回值,return往下的代码将不会执行,只能用在函数体内
    return就是函数调用本身的结果
    return可以返回任意的数据类型
    return语句[表达式]退出函数,选择性地向调用方返回一个表达式。不带参数值的return语句返回None。之前的例子都没有示范如何返回数值,下例便告诉你怎么做:
     
    def func(a):
         print('this is test func')
         if a == 0:
             print('aaa')
             return 0
         elif a == 2:
             return 2
         else:
             print('bbb')
             return 1
    func(1)
     
    def func1(a):
         if a == 1:
             return 1
         elif a == 2:
             return 2
         elif a == 3:
             return 3
         else:
             return '错误'
    def func2(i):
         if i == 3:
             print('判断正确')
         else:
             print('判断错误')
    res = func1(3)
    func2(res)
     
    def func1(a):
         if a == 0:
             print('thisaaaa')
             print('thisaaaa')
             print('thisaaaa')
             return 0
         else:
             return 1
    if func1(0) == 0:
         print('ok')
    else:
         print('不ok')
     
    def func():
         return func
    print(func)          #打印内存地址
     
    写函数说明
    def add_sum(arg1, arg2):      # 返回2个参数的和."
        total = arg1 + arg2
        print("函数内 : ", total)
        return total

    # 调用sum函数
    total = add_sum(10, 20)
     函数的特性
    #函数可以被引用
    def f1():
        print('this is f1')
        return 'ok'
    res = f1()
    print(res)

    #函数可以当参数传递
    def foo(a):
        print(a)
    def bar(b):
        print(b)

    bar(foo('你好'))

    #嵌套函数
    def f1():
        def f2():
            def f3():
                print('this is f3')
            f3()
        f2()
    f1()
    名称空间和作用域
     
    名称空间:变量名和内存地址对应的表叫做名称空间
    作用域:Python 的作用域(scope)决定了我们在程序中能否直接使用名称空间中的名称,直接访问的意思是指不需要在名称前添加名称空间的前缀。对于 Python 来说,至少存在以下三类的作用域。
     
    #内置名称空间:(python启动时就有)python解释器内置的名字,print,max,min
    #全局名称空间:(执行python文件时启动,包括if判断得出的结果)定义的变量
    #局部名称空间:(调用函数时启动,调用结束失效)函数内部定义的变量

    总结:三者的加载顺序
            内置--->全局--->局部
       
            三者的访问顺序
            局部--->全局--->内置
     

    人生一世,草木一秋。 众生无我,苦乐随缘。
  • 相关阅读:
    kubernetes部署jenkins(Docker in Docker)及认证
    helm生产环境离线安装
    helm在kubernetes环境中搭建
    GlusterFs卷类型分析及创建、使用(结合kubernetes集群分析)
    glusterfs详解及kubernetes 搭建heketi-glusterfs
    kubernetes搭建Harbor无坑及Harbor仓库同步
    生产环境:ansible自动化部署kubernetes-1.14
    Gluserfs 架构详解【译】官网
    k8s部署高可用Ingress
    《A Survey on Transfer Learning》迁移学习研究综述 翻译
  • 原文地址:https://www.cnblogs.com/hao6/p/12863531.html
Copyright © 2011-2022 走看看