Python的语言特性

1.Python函数参数的传递

例1:a=1

def fun(a):

    a=2

fun(a)

print a #1

例2:a=[]

def fun(a):

    a.append(1)

fun(a)

print a #1

扫描二维码关注公众号,回复: 39343 查看本文章

这里记住的类型是属于对象的,而对象分为可变和不可变的,可变的list,dict,不可变的是string,number,tuple。

一个引用传递给函数,函数自动复制一份引用,函数里边的引用和外边的没有关系。在第一个例子里函数把应用指向了一个不可变的对象,函数里面和外面的结果不一样。第二个例子函数把引用指向了可变对象,直接在内存里进行修改。

2.@classmethod 和 @staticmethod

Python里分为静态方法,实例方法和类方法。

def foo(x):

    print "excuting foo(%s)"%(x)

class A(object):

    def foo(self,x):

        print "excuting foo(%s,%s)"%(self,x)

   @classmethod

    def class_foo(cls,x):

        print "excuting class_foo(%s,%s)"%(cls,x)

 @staticmethod

    def static_foo(x):

        print "excuting static_foo(%s)"%x

a=A()

实例a可以调用静态方法,类方法和实例方法   类A 可以调用静态方法和类方法,但是不可以调用实例方法

首先先要理解下self和cls,这个self和cls是对实例或者类的一个绑定,一般的函数foo(x)就可以随意调用,他和任何实例或者类无关,实例方法的调用离不开实例,每次的调用都要把实例自己传递给函数,a.foo(self,x)等于a.foo(a,x),a.foo(x)其实也是a.foo(a,x),类方法一样,只不过他传递的是类而不是实例,A.foo(x)。

3.类变量和实例变量

class Person():

    name="aaa"

p1=person()

p2=person()

p1.name="bbb"

print p1.name #bbb

pring p2.name #aaa

print Person.name #aaa

p1.name,一开始调用了类变量,但是实例的作用域把类变量的引用改变了,变成了实例变量,所以,self.name不在指向类变量了。

可以看看下面的例子:

class Person ():

    a=[]

p1=Person(0

p2=Person()

p1.name.append(1)

print p1.a #[1]

print p2.a#[1]

print Person.a#[1]


3.python 中单下划线和双下滑线的区别?

_foo(),是一种约定,是指变量私有化,

_foo()_是约束,用来区别其他用户自己的命名,以防止冲突。

4._new_ 和 _init_的区别?

_new_是一个静态方法,_init_是一个实例方法,

_new_方法会返回一个实例,_init_方法什么也不返回,

只有在_new_返回一个实例后,才会调用_init_方法

5.单例模式 (import版)

class My_singleton(objec):

    def func(self):

        pass

mysingleton = My_singleton()

#to use

from mysingleton.py import My_singleton;

my_singleton.foo()

6.写一个函数,输入一个字符串,返回倒序的结果

1.利用字符串自带的方法:def reverse_text(text='abcdef')

    return [::-1]

2.把字符串变成列表,使用列表的reverse方法

def string_reverse(text='abcdef'):

    new_text=list(text)

    new_text.reverse()

    return "".join(new_text)

print string_reverse;

3.新建一个列表,从列表的后面往前取

def string_reverse(text='abcdef'):

    list=[]

    for i in range(1,len(list)+1):

        list.append(text[-i])

return ''.join(list)


4.按升序合并如下两个list, 并去除重复的元素

list1 = [ 2 , 3 , 8 , 4 , 9 , 5 , 6 ]
 
list2 = [ 5 , 6 , 10 , 17 , 11 , 2 ]

list3 = list1 + list2
 
print set (list3)

5.下面的代码会不会报错     代码会返回一个[],不会报IndexError
list = [ 'a' , 'b' , 'c' , 'd' , 'e' ]

print list[10:]  


新的默认列表在仅仅只在函数被定义的时候被创建一次,函数里没有被指定的列表时其实只是操作的同意个列表,





























        











猜你喜欢

转载自blog.csdn.net/qq_31479309/article/details/80030337