精华内容
下载资源
问答
  • Python中函数的用法

    2021-01-21 22:43:08
    Python中的函数用法。 一.函数的定义 在某些编程语言当中,函数声明和函数定义是区分开的(在这些编程语言当中函数声明和函数定义可以出现在不同的文件中,比如C语言),但是在Python中,函数声明和函数定义是视为...

    Python中的函数用法。

    一.函数的定义

    在某些编程语言当中,函数声明和函数定义是区分开的(在这些编程语言当中函数声明和函数定义可以出现在不同的文件中,比如C语言),但是在Python中,函数声明和函数定义是视为一体的。
    在Python中,函数定义的基本形式如下:

    def function(params):
        block
        return expression/value
    

    在这里说明几点:
      (1)在Python中采用def关键字进行函数的定义,不用指定返回值的类型。
      (2)函数参数params可以是零个、一个或者多个,同样的,函数参数也不用指定参数类型,因为在Python中变量都是弱类型的,Python会自动根据值来维护其类型。 这点就很好,不用刻意去维护函数入参和出参
      (3)return语句是可选的,它可以在函数体内任何地方出现,表示函数调用执行到此结束;
       如果没有return语句,会自动返回NONE,如果有return语句,但是return后面没有接表达式或者值的话也是返回NONE。
       下面看两个例子:

    def printHello():
        print 'hello'
    def printNum():
        for i in range(0,10):
            print i
        return     
    def add(a,b):
        return a+b 
    print printHello()
    print printNum()
    print add(1,2)   	
    

    二.函数的使用

    在定义了函数之后,就可以使用该函数了,但是在Python中要注意一个问题,就是在Python中不允许前向引用,即在函数定义之前,不允许调用该函数。看个例子就明白了:

    print add(1,2)
    def add(a,b):
        return a+b
    

    这段程序运行的结果是:
      从报的错可以知道,名字为"add"的函数未进行定义。所以在任何时候调用某个函数,必须确保其定义在调用之前。

    三.实参和形参

    在学习C语言函数的时候,遇到的问题主要有形参实参的区别、参数的传递和改变、变量的作用域。同样在Python中,关于对函数的理解和使用也存在这些问题。
    一.函数形参和实参的区别
      相信有过编程语言经验的朋友对形参和实参这两个东西并不陌生。形参全称是形式参数,在用def关键字定义函数时函数名后面括号里的变量称作为形式参数。实参全称为实际参数,在调用函数时提供的值或者变量称作为实际参数。举个例子:

    #这里的a和b就是形参
    def add(a,b):
        return a+b
    #这里的1和2是实参
    add(1,2)
    x=2
    y=3
    #这里的x和y是实参
    add(x,y)
    

    二.参数的传递和改变
      在大多数高级语言当中,对参数的传递方式这个问题的理解一直是个难点和重点,因为它理解起来并不是那么直观明了,但是不理解的话在编写程序的时候又极其容易出错。
      首先在讨论这个问题之前,我们需要明确一点就是在Python中一切皆对象,变量中存放的是对象的引用。这个确实有点难以理解,“一切皆对象”?对,在Python中确实是这样,包括我们之前经常用到的字符串常量,整型常量都是对象。不信的话可以验证一下:

    def f1():
        print '&2', ;print id(2)
        x=2
        print '&x', ;print id(x)
        y='hello'
        print '&hello', ;print id("hello")
        print '&y', ;print id(y)
    

    在这里插入图片描述

    先解释一下函数id( )的作用。下面这段话是官方文档对id()函数的解释:
    在这里插入图片描述

    显而易见,id(object)函数是返回对象object在其生命周期内位于内存中的地址,id函数的参数类型是一个对象,因此对于这个语句

    id(2)没有报错,就可以知道2在这里是一个对象。下面再看几个例子:

    x=2
    print id(2)
    print id(x)
    y='hello'
    print id('hello')
    print id(y)
    

    从结果可以看出,id(x)和id(2)的值是一样的,id(y)和id(‘hello’)的值也是一样的。

    在Python中一切皆对象,像2,'hello’这样的值都是对象,只不过5是一个整型对象,而’hello’是一个字符串对象。上面的x=2,在Python中实际的处理过程是这样的:先申请一段内存分配给一个整型对象来存储整型值2,然后让变量x去指向这个对象,实际上就是指向这段内存(这里有点和C语言中的指针类似)。而id(2)和id(x)的结果一样,说明id函数在作用于变量时,其返回的是变量指向的对象的地址。因为变量也是对象,所以在这里可以将x看成是对象2的一个引用。

    下面再看几个例子:

    x=2
    print id(x)
    y=2
    print id(y)
    s='hello'
    print id(s)
    t=s
    print id(t)
    

    从运行结果可以看到id(x)和id(y)的结果是相同的,id(s)和id(t)的结果也是相同的。这说明x和y指向的是同一对象,而t和s也是指向的同一对象。x=2这句让变量x指向了int类型的对象2,而y=2这句执行时,并不重新为2分配空间,而是让y直接指向了已经存在的int类型的对象2.这个很好理解,因为本身只是想给y赋一个值2,而在内存中已经存在了这样一个int类型对象2,所以就直接让y指向了已经存在的对象。这样一来不仅能达到目的,还能节约内存空间。t=s这句变量互相赋值,也相当于是让t指向了已经存在的字符串类型的对象’hello’(这个原理和C语言中指针的互相赋值有点类似)。

    看这幅图就理解了:
    ​​

    下面再看几个例子:

    x=2
    print '&2', ;print id(2)
    print '&x', ;print id(x)
    x=3
    print '&3', ;print id(3)
    print '&x', ;print id(x)
    L=[1,2,3]
    M=L
    print '&L', ;print id(L)
    print '&M', ;print id(M)
    print '&L[2]', ;print id(L[2])
    L[0]=2
    print '&L', ;print id(L)
    print M
    

    在这里插入图片描述
     下面来分析一下这个结果,两次的id(x)的值不同,这个可能让人有点难以理解。注意,在Python中,单一元素的对象是不允许更改的,比如整型数据、字符串、浮点数等。*x=3这句的执行过程并不是先获取x原来指向的对象的地址,再把内存中的值更改为3,而是新申请一段内存来存储对象3,再让x去指向对象3,所以两次id(x)的值不同。
     然而为何改变了L中的某个子元素的值后,id(L)的值没有发生改变?在Python中,复杂元素的对象是允许更改的,比如列表、字典、元组等。Python中变量存储的是对象的引用,对于列表,其id()值返回的是列表第一个子元素L[0]的存储地址。
     就像上面的例子,L=[1,2,3],这里的L有三个子元素L[0],L[1],L[2],L[0]、L[1]、L[2]分别指向对象1、2、3,id(L)值和对象3的存储地址相同,看下面这个图就明白了:
     在这里插入图片描述
    因为L和M指向的是同一对象,所以在更改了L中子元素的值后,M也相应改变了,但是id(L)值并没有改变,因为这句L[0]=2只是让L[0]重新指向了对象2,而L[0]本身的存储地址并没有发生改变,所以id(L)的值没有改变( id(L)的值实际等于L[0]本身的存储地址)。

    下面就来讨论一下函数的参数传递和改变这个问题。

    在Python中参数传递采用的是值传递,这个和C语言有点类似。先看几个例子:

    def modify1(m,K):
        m=2
        K=[4,5,6]
        return 
    def modify2(m,K):
        m=2
        K[0]=0
        return
    def f3():
        n=100
        L=[1,2,3]
        modify1(n,L)
        print n
        print L
        modify2(n,L)
        print n
        print L 
    

    在这里插入图片描述
     从结果可以看出,执行modify1( )之后,n和L都没有发生任何改变;
     执行modify2( )后,n还是没有改变,L发生了改变。因为在Python中参数传递采用的是值传递方式,在执行函数modify1时,先获取n和L的id( )值,然后为形参m和K分配空间,让m和K分别指向对象100和对象[1,2,3]。m=2这句让m重新指向对象2,而K=[4,5,6]这句让K重新指向对象[4,5,6]。这种改变并不会影响到实参n和L,所以在执行modify1之后,n和L没有发生任何改变;
     在执行函数modify2时,同理,让m和K分别指向对象2和对象[1,2,3],然而K[0]=0让K[0]重新指向了对象0(注意这里K和L指向的是同一段内存),所以对K指向的内存数据进行的任何改变也会影响到L,因此在执行modify2后,L发生了改变。
     三.变量的作用域
      在Python中,也存在作用域这个问题。在Python中,会为每个层次生成一个符号表,里层能调用外层中的变量,而外层不能调用里层中的变量,并且当外层和里层有同名变量时,外层变量会被里层变量屏蔽掉。举个例子:

    def function():
        x=2
        count=2
        while count>0:
            x=3
            print x
            count=count-1
    function()   
    

    在函数function中,while循环外面和while循环里面都有变量x,此时,while循环外面的变量x会被屏蔽掉。注意在函数内部定义的变量作用域都仅限于函数内部,在函数外部是不能够调用的,一般称这种变量为局部变量。
      还有一种变量叫做全局变量,它是在函数外部定义的,作用域是整个文件。全局变量可以直接在函数里面应用,但是如果要在函数内部改变全局变量,必须使用global关键字进行声明。

    x=2
    def fun1():
        print x
    def fun2():
        global x
        x=3
        print x
    fun1()
    fun2()
    print x
    

    在这里插入图片描述

    三 函数参数类型

    在前面两篇文章中已经探讨了函数的一些相关用法,下面一起来了解一下函数参数类型的问题。在C语言中,调用函数时必须依照函数定义时的参数个数以及类型来传递参数,否则将会发生错误,这个是严格进行规定的。然而在Python中函数参数定义和传递的方式相比而言就灵活多了。
    一.函数参数的类型
      之前我们接触到的那种函数参数定义和传递方式叫做位置参数,即参数是通过位置进行匹配的,从左到右,依次进行匹配,这个对参数的位置和个数都有严格的要求。*在Python中还有一种是通过参数名字来匹配的,这样一来,不需要严格按照参数定义时的位置来传递参数,这种参数叫做关键字参数。*下面举两个例子:

    def display(a,b):
        print a
        print b
    display('hello','world')
    

    这段程序是想输出’hello world’,可以正常运行。如果像下面这样写的话,结果可能就不是预期的样子了:

    def display(a,b):
        print a
        print b 
    #这样会报错
    display('hello')
    #这样会输出'world hello'
    display('world','hello')
    

    可以看出在Python中默认的是采用位置参数来传参。这样调用函数必须严格按照函数定义时的参数个数和位置来传参,否则将会出现预想不到的结果。下面这段代码采用的就是关键字参数:

    def display(a,b):
        print a
        print b
    #下面2句达到的效果是相同的
    display(a='world',b='hello')
    display(b='hello',a='world')
    

    可以看到通过指定参数名字传递参数的时候,参数位置对结果是没有影响的。
    关键字参数最厉害的地方在于它能够给函数参数提供默认值。比如:

    def display(a='hello',b='wolrd'):
        print a+b
    display()
    display(b='world')
    display(a='hello')
    display('world')
    

    在这里插入图片描述

    在上面的代码中,分别给a和b指定了默认参数,即如果不给a或者b传递参数时,它们就分别采用默认值。在给参数指定了默认值后,如果传参时不指定参数名,则会从左到右依次进行传参,比如display(‘world’)没有指定’world’是传递给a还是b,则默认从左向右匹配,即传递给a。
      使用默认参数固然方便,但是有一点要非常注意,在重复调用函数时默认形参会继承之前一次调用结束之后该形参的值。下面看一个例子:

    def insert(a,L=[]):
        L.append(a)
        print L
    insert('hello')
    insert('world')
    

    其运行结果为:
      在这里插入图片描述

    二.任意个数参数
      一般情况下我们在定义函数时,函数参数的个数是确定了的,然而某些情况下我们是不能确定参数的个数的,比如要存储某个人的名字和它的小名,某些人小名可能有2个或者更多个,此时无法确定参数的个数,就可以使用收集参数了,使用收集参数只需在参数前面加上’*‘或者’**’。

    def storename(name,*nickName):
        print 'real name is %s' %name
        for nickname in nickName:
            print nickname
    storename('jack')
    storename(u'詹姆斯',u'小皇帝')
    storename(u'奥尼尔',u'大鲨鱼',u'三不沾')
    

    在这里插入图片描述

    '‘和’**‘表示能够接受0到任意多个参数,’‘表示将没有匹配的值都放在同一个元组中,’**'表示将没有匹配的值都放在一个dictionary中。

    def printvalue(a,**d):
        print 'a=%d' %a
        for x in d:
            print x+'=%d' %d[x]
    
    printvalue(1,b=2,c=3)
    

    在这里插入图片描述

    最后需要补充一点:Python中函数是可以返回多个值的,如果返回多个值,会将多个值放在一个元组或者其他类型的集合中来返回。

    def function():
        x=2
        y=[3,4]
        return x,y
    print function()
    

    在这里插入图片描述

    重在积累,每天记录一点点

    展开全文
  • 英文文档:class complex([real[, imag]])Return a complex number with the value real + imag*1j or convert a string or number to a complex number. If the first parameter is a string, it will be ...

    英文文档:

    class complex([real[, imag]])

    Return a complex number with the value real + imag*1j or convert a string or number to a complex number. If the first parameter is a string, it will be interpreted as a complex number and the function must be called without a second parameter. The second parameter can never be a string. Each argument may be any numeric type (including complex). If imag is omitted, it defaults to zero and the constructor serves as a numeric conversion like int and float. If both arguments are omitted, returns 0j.

    Note

    When converting from a string, the string must not contain whitespace around the central + or - operator. For example, complex('1+2j') is fine, but complex('1 + 2j') raises ValueError.

    说明:

    1. 函数功能,返回一个复数。有两个可选参数。

    2. 当两个参数都不提供时,返回复数 0j。

    >>> complex()

    0j

    3. 当第一个参数为字符串时,调用时不能提供第二个参数。此时字符串参数,需是一个能表示复数的字符串,而且加号或者减号左右不能出现空格。

    >>> complex('1+2j',2) #第一个参数为字符串,不能接受第二个参数

    Traceback (most recent call last):

    File "", line 1, in

    complex('1+2j',2)

    TypeError: complex() can't take second arg if first is a string

    >>> complex('1 + 2j') #不能有空格

    Traceback (most recent call last):

    File "", line 1, in

    complex('1 + 2j')

    ValueError: complex() arg is a malformed string

    4. 当第一个参数为int或者float时,第二个参数可为空,表示虚部为0;如果提供第二个参数,第二个参数也需为int或者float。

    >>> complex(2)

    (2+0j)

    >>> complex(2.1,-3.4)

    (2.1-3.4j)

    感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

    如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!

    展开全文
  • Python中,对这两个东西有明确规定:函数function —— A series of statements which returns some value toa caller. It can also be passed zero or more arguments which may beused in the execution of ...

    在Python中,对这两个东西有明确的规定:

    函数function —— A series of statements which returns some value toa caller. It can also be passed zero or more arguments which may beused in the execution of the body.

    方法method —— A function which is defined inside a class body. Ifcalled as an attribute of an instance of that class, the methodwill get the instance object as its first argument (which isusually called self).

    从定义的角度上看,我们知道函数(function)就相当于一个数学公式,它理论上不与其它东西关系,它只需要相关的参数就可以。所以普通的在module中定义的称谓函数是很有道理的。

    那么方法的意思就很明确了,它是与某个对象相互关联的,也就是说它的实现与某个对象有关联关系。这就是方法。虽然它的定义方式和函数是一样的。也就是说,在Class定义的函数就是方法。

    从上面的角度看似乎很有道理。

    >>> def fun():

    pass

    >>> type(fun)

    #没有问题

    >>> class Cla():

    def fun():

    pass

    [email protected]

    def fun1(cls):

    pass

    [email protected]

    def fun2():

    pass

    >>> i=Cla()

    >>>Cla.fun.__class__

    #为什么还是函数

    >>>i.fun.__class__    #这个还像话

    >>>type(Cla.fun1)

    #这里又是方法

    >>> type(i.fun1)

    #这里仍然是方法

    >>>type(Cla.fun2)

    #这里却是函数

    >>> type(i.fun2)

    #这里却是函数

    事实上,上面的结果是可以解释的:

    1,普通方法(老版中直接就是"instancemethod")在module中与在Class中定义的普通函数,从其本身而言是没有什么区别的,他们都是对象函数属性。 之所以会被说在Class中的定义的函数被称为方法,是因为它本来就是面向将来的实例对象的,其实他们就是实例方法,这些方法是与实例相联系的(从实例出发访问该函数会自动赋值)。所以你从Class访问仍然是一个函数

    2,类方法("classmethod"),因为类同样是对象,所以如果函数与类进行联系了话(与实例方法一样的模式)那么就能够这么说了!

    3,静态方法,虽然定义在内部,并且也较方法,但是却不与任何对象联系,与从类访问方法是一样的,他们仍然是函数。 这样看来上面的定义可以改改了:

    函数的定义自然不变。

    方法的定义可以是这样的,与某个对象进行绑定使用的函数。注意哦。绑定不是指" ."这个符号,这个符号说实在的只有域名的作用。绑定在这里是指,会默认赋值该绑定的对象。

    展开全文
  • bool([x])英文说明:Convert a value to a Boolean, using the standard truth testing procedure. If x is false or omitted, this returns False; otherwise it returns True. bool is also a class, which is a ...

    bool([x])

    英文说明:Convert a value to a Boolean, using the standard truth testing procedure. If x is false or omitted, this returns False; otherwise it returns True. bool is also a class, which is a subclass of int. Class bool cannot be subclassed further. Its only instances are False and True.

    New in version 2.2.1.

    Changed in version 2.3: If no argument is given, this function returns False.

    中文说明:将x转换为Boolean类型,如果x缺省,返回False,bool也为int的子类;

    参数x:任意对象或缺省;大家注意到:这里使用了[x],说明x参数是可有可无的,如果不给任何参数则会返回False。

    版本:在python 2.2.1中引入的新函数,在python2.3以后如果不传参数则返回False。

    注意:该函数在python3中也可正常使用

    实例:>>> bool(0)

    False

    >>> bool("abc")

    True

    >>> bool("")

    False

    >>> bool([])

    False

    >>> bool()

    False

    >>> issubclass(bool, int) #bool是一个subclass int

    True

    展开全文
  • bool([x])英文说明:Convert a value to a Boolean, using the standard truth testing procedure. If x is false or omitted, this returns False; otherwise it returns True. bool is also a class, which is a ...
  • 对于python中的remove()函数,官方文档解释是:Remove first occurrence of value.大意也就是移除列表中等于指定值第一个匹配元素。语法list.remove()参数obj 参数:从列表中删除对象索引返回值删除后不会...
  • Python是进行数据分析...Pandas dataframe.set_value()函数将单个值放在传递列和索引处。它以轴标签为输入,并以标量值放置在 DataFrame 中的指定索引处。替代此功能是.at[]或者.iat[]。用法:DataFrame.set_va...
  • 字典特性:key-value结构key必须可hash、且必须为不可变数据类型、必须唯一可存放任意多个值、可修改、可以不唯一无序查找速度快dict_fruit = {'apple':'苹果','banana':'香蕉','cherry':'樱桃','avocado':'牛油果...
  • My problem is as follows:I would like to call a C function from my Python file and return a value back to that Python file.I have tried the following method of using embedded C in Python (the followin...
  • 多用于在for循环得到计数,可以同时获得索引和值,即需要index和value时候可以使用。 >>> country=["China","America","Korea","Russia",&...
  • Python中递归函数的self用法

    千次阅读 2019-08-20 22:00:49
    self.ans = None ##self在类定义变量是全局变量 需要加self 1、方法自身间回溯需要加self class Solution: def lowestCommonAncestor(self, root, p, q): # Value ...
  • 在学习return函数时候,还是要知道了解它最主要的函数作用,比如,怎么去实现返回一个值,另外还有就是我们经常会用到使用return能够进行多值输出,这才是我们需要抓住知识重点,针对上述所提及内容,都可以...
  • 在学习return函数时候,还是要知道了解它最主要的函数作用,比如,怎么去实现返回一个值,另外还有就是我们经常会用到使用return能够进行多值输出,这才是我们需要抓住知识重点,针对上述所提及内容,都可以...
  • 在学习return函数时候,还是要知道了解它最主要的函数作用,比如,怎么去实现返回一个值,另外还有就是我们经常会用到使用return能够进行多值输出,这才是我们需要抓住知识重点,针对上述所提及内容,都可以...
  • DataFrame.sub(other,axis='columns',level=None,fill_value...与等效,但支持用fill_value替换输入之一中的丢失数据。rsub是反向版本。dataframe - other在灵活包装器(add,sub,mul,div,mod,pow)使用算术运...
  • Python内置函数print()是基本输出函数,可以使用help()函数查看其详细用法和参数含义:>>> help(print)Help on built-in function print in module builtins:print(...)print(value, ..., sep=' ', end='\n...
  • DataFrame.pivot_table(self,values=None,index=None,columns=None,aggfunc='mean',fill_value=None,margins=False,dropna=True,margins_name='All',observed=False)→ 'DataFrame'[source]创建电子表格样式pivot ...
  • Python内置enumerate函数可以把一个list变成索引-元素对,这样就可以在for循环同时迭代索引和元素本身: >>> for i, value in enumerate(['A', 'B', 'C']): ... print(i, value) ... 0 A 1 B 2 C ...
  • python中的isinstance()函数的用法

    千次阅读 2019-10-28 14:56:33
    今天学习python中字节串(bytes)和字符串(str)相互转化过程,需要将输入内容转化为字符串或者字节串。将上面需求别写成相应的函数 1.首先将输入转化为字符串 # 转化为字符串 def to_str(bytes_or_str): if...
  • enumerate是python的内置函数 二、功能 enumerate()是Python的内置函数 用于可迭代\可遍历数据对象组合为一个索引序列(列表,元组等数据结构),同时列出数据和数据下标 一般在for循环使用 三、例子 m = ...
  • 对于python中的remove()函数,官方文档解释是:Remove first occurrence of value.大意也就是移除列表中等于指定值第一个匹配元素。语法list.remove()参数obj 参数:从列表中删除对象索引返回值删除后不会...
  • Python中min/max函数的用法

    千次阅读 2019-05-09 23:54:35
    本篇以min()函数为例进行说明,max()同理。 先来看看源码 def min(*args, key=None): # known special case of min """ min(iterable, *[, default=obj, key=func]) -> value min(arg1, arg2, *args, *[, key...
  • Python中,对这两个东西有明确规定:函数function —— A series of statements which returns some value to a caller. It can also be passed zero or more arguments which may be used in the execution of ...
  • 出处getattr是python一个内建函数,在python的官方文档:getattr()解释:getattr(object, name[, default])Return the value of the named attribute of object. name must be a string. If the string is ...
  • 对于python中的remove()函数,官方文档解释是:Remove first occurrence of value.大意也就是移除列表中等于指定值第一个匹配元素。语法list.remove()参数obj 参数:从列表中删除对象索引返回值删除后不会...
  • complex([real[, imag]])中文说明:创建一个值为real + imag * j复数或者转化一个字符串或数为复数。如果第一个参数为字符串,则不需要指定第二...英文说明:Create a complex number with the value real + imag...

空空如也

空空如也

1 2 3 4 5 ... 13
收藏数 251
精华内容 100
关键字:

python中value函数的用法

python 订阅