zoukankan      html  css  js  c++  java
  • python-函数

    函数的定义和调用:

    def 函数名(参数1,参数2,参数3...):(也可以没有参数)

    执行语句

    return (没有返回值,返回None

     

    功能模块化,代码复用的,

     

     

    func() 加括号就是调用

     

    def func():

        print('这是一个函数')

    func() #函数调用

    #func  #函数对象

    def func1(x,y):#定义参数

        #定义时候写的参数,形参(形式参数)

        print('和是:',x+y)

    func1(2,3) #传参 2,3实际传递进来的参数叫做实参

     

     

    必备参数:

    必备参数必须以正确的顺序传入函数,调用时数量必须和声明时的一样

     

    命名参数:(你的形参在定义的时候没有语法错误)

    我们可以打乱顺序传递参数,也就是确定的传入参数值,可以跳过不传的参数值

     

    缺省参数(默认参数):

    def printme(age,name=’jack’) 设置缺省参数一定是从右向左

    如果给默认参数传递了值,那么会覆盖掉之前的默认值

     

     

    不定长参数:

    你可能需要一个函数能处理比当初声明时更多的参数,这些参数叫做不定长参数,声明时不会具体定义

    func(*arg)

    他会默认把你传递进来的多个参数处理成元组类型

    func(**arg)

    传递参数的时候,要以键值对的形式,传递进来的多个键值对会默认处理成字典

     

    def func1(**arg):

        print(arg)

        print(type(arg))

        #不定长参数,两个*接受到的参数,他会帮你处理成字典

    func1(a=1,b=2,c=3)

     

     

    #ctrl + / 批量注释

     

    返回值:

    return 可以返回任意种类的对象,同时也能返回多个值,

     

    def func():

         return(1,2)
    print(type(func()))

    看起来这里的代码好像返回两个值,实际上只有一个,一个包含2个元素的元组,它的圆括号是可选的,这里省略了

     

     

    *a 可以打包接受返回值,

     

    也可以显式的修改返回值的类型。

    def func(a,b,c):

        return [a,b,c]

     

    def func(a,b,c):

    return list((a,b,c))

     

     

    多态:

    一个操作的意义,取决于被操作对象的类型

     

    def add(x,y):

        print(x+y)

    add(1,2)

    add('a','b')

    add([1,2,3],['a','b','c'])

     

    善变的女人帕瓦罗蒂

     

     

    a = 1

    def func():

        a = 2

        print('函数内部的a:',a)

    func()

    print('函数外部的a:',a)

     

    全局作用域就是这个.py脚本

    局部作用域就是函数func里面的区域

    全局变量 : a

    局部变量:a

     

    global 语句,用来在函数内部声明一个全局变量

     

     

    参数传递:

    结果

    [root@VM_86_19_centos 1-5-函数参数传递]# python 2.py 

    外部的a: [1, 2, 3]

    inside a is: ['a', 'b', 'c']

    外部的a: [1, 2, 3]

    ------------

    外部的a: [1, 2, 3]

    inside a is: [1, 2, 3, 'a', 'b', 'c']

    外部的a: [1, 2, 3, 'a', 'b', 'c']

     

     

    赋值(=)是给他新建了一个数据地址,修改(append)/(+=)是在原基础上进行修改。

     

    当我们的参数接收到的是一个不可变数据类型,比如整数,字符串,元组。

    那么在函数内部,不管你使用赋值语句 = 或者说 += 也都无法修改原址的内容,

    不可变对象,你只能是给他重新赋值。

     

    为了解决  C/C++ 指针,引用 

     

    传递一个可变对象,比如列表,如果我们内部使用了赋值语句 = ,那么是给这个函数内部的局部变量一块新地址

    如果我们修改了这个传递进来的可变数据对象,那么就是修改了其原址的值

     

    +=    =  在函数内部对一个可变数据对象的操作影响到的结果是不一样的

     

    传值

    传值就是传递了一个不可变数据对象,那么在函数内部做修改不会影响到外部的数据

     

    传引用

    传引用就是实参传递了可变数据对象,这样我们在函数内部就可以直接修改原址的值

     

     

    你们写了一个功能函数,在传递参数的时候,一定要注意,传进来的是可变还是不可变数据对象,

    传了一个列表进来,那么你就不能直接对他进行修改

     

     

     

    函数嵌套:

    内部函数整个函数体都在外部函数的作用域,如果在外部没有对这个函数的引用,那么除了在函数体内,任何地方都不能调用这个函数,

     

     

    匿名函数:(lambda表达式)

    lambda 参数1,参数2,参数3,参数N:表达式

     

    默认参数也可以在lambda中使用

    f = lambda x,y=1:x+y

     

    lambda 通常用来编写跳转表(jump table) 也就是行为的列表或字典,能够按照需要执行相应的动作,比如说

    L = [lambda x:x*2 ,

    lambda x:x*3,

    lambda x:x*4

    ]

     

     

     

     

  • 相关阅读:
    dev c++ 字符间隔大 build with c++11
    What does -> mean in Python function definitions?
    input something to stdin, especially there is "$" in the uname
    control gpu memory
    调研打标(标签)的实现方式
    分页设计思考
    模糊查询的几种实现方式
    Error creating bean with name '***': Injection of resource dependencies failed,Bean named 'redisService' is expected to be of type
    Could not write JSON: No serializer found for class
    神奇BUG
  • 原文地址:https://www.cnblogs.com/askDing/p/8525333.html
Copyright © 2011-2022 走看看