为了账号安全,请及时绑定邮箱和手机立即绑定

这样写有什么不妥的地方吗?

class Person:

    name=""

    def __init__(self):

       pass

        

def compare_name(Person_list,Person_c):

    

    for i in range(0,len(Person_list)):

        if i <= (len(Person_list)-2):

            name_a = Person_list[i].name.lower()

            name_b = Person_list[i+1].name.lower()

            if name_a > name_b:

                lowercompare=1

            else:

                lowercompare=0

            name_a = Person_list[i].name.upper()

            name_b = Person_list[i+1].name.upper()

            if name_a > name_b:

                uppercompare=1

            else:

                uppercompare=0

    

            if lowercompare ==1 and uppercompare ==1:

                Person_c = Person_list[i+1]

                Person_list[i+1] = Person_list[i]

                Person_list[i] = Person_c

    return Person_list


p1 = Person()

p1.name = 'Bart'


p2 = Person()

p2.name = 'Adam'


p3 = Person()

p3.name = 'Lisa'


p4=Person()

L1 = [p1, p2, p3]

L2 = compare_name(L1,p4)


print L2

print L2[0].name

print L2[1].name

print L2[2].name

还有为什么参考代码里面,类没有name变量,P1 P2 P3 初始化时可以去给那么赋值,这点有疑问

正在回答

4 回答

1、python是动态语言,实例对象的属性变量、方法是可以动态生成的,不同的实例对象包含的属性可以不同,这种写法表示name是类的属性,实例对象可以直接调用类型属性,在存在名称冲突时,系统优先取实例对象的同名属性
class Person:    
    name=""    
    def __init__(self):       
        pass
...
p1 = Person()
p1.name = 'Bart'
p2 = Person()
p2.name = 'Adam'
p3 = Person()
p3.name = 'Lisa'
#Person.Name=''

def compare_name(Person_list,Person_c):
这个函数中的第二个参数是不必要的,可以删除,Person_c只是一个临时变量。
函数里面的转换为小写比较和转换为大写比较只需要执行一种操作即可。

针对排序还可以调用sorted函数实现排序功能
def compare_name(Person_list):        
    return sorted(Person_list,lambda x,y:cmp(x.name.upper(),y.name.upper()))


2 回复 有任何疑惑可以回复我~

cmp(x,y)用于比较两个对象,如果x<y,返回-1,如果x>y,返回1;如果x==y,返回0

0 回复 有任何疑惑可以回复我~

cmp是什么啊


0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
python进阶
  • 参与学习       255667    人
  • 解答问题       2949    个

学习函数式、模块和面向对象编程,掌握Python高级程序设计

进入课程

这样写有什么不妥的地方吗?

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信