zoukankan      html  css  js  c++  java
  • 【334】Python Object-Oriented Programming

    Reference: Python中self用法详解

    • __init__ 方法;
    • 私有变量。

    Reference: 【290】Python 函数

    • class 里面的 function 创建与此一致,只是会多一个 self 参数;
    • 必备参数 —— 须以正确的顺序传入;
    • 关键字参数 —— 允许函数调用时参数的顺序与声明时不一致;
    • 缺省参数 —— 缺省参数的值如果没有传入,则被认为是默认值;
    • 不定长参数 —— 加了星号(*)的变量名会存放所有未命名的变量参数;
    • 匿名参数 —— 使用 lambda 来创建匿名函数;
    • return 语句 —— return语句退出函数,选择性地返回一个表达式。

    Example:

    '''
    Created on 2018年9月18日
    
    @author: McDelfino
    '''
    
    class Node:
        def __init__(self, value):
            self.value = value
            self.next_node = None
            
    n1 = Node(10)
    print(n1.value)
    n2 = Node(15)
    
    n1.next_node = n2
    print(n1.next_node.value)
    
    n3 = Node(11)
    n2.next_node = n3
    
    print(n1.next_node.next_node.value)
    
    
    class LinkedList:
        def __init__(self, L = None, *, key = lambda x: x):
            if not L:
                self.head = None
                return
            self.key = key
            self.head = Node(L[0])
            current_node = self.head
            for e in L[1: ]:
                current_node.next_node = Node(e)
                current_node = current_node.next_node
         
        def display(self, separator = ', '):
            E = []
            current_node = self.head
            while current_node:
                E.append(current_node.value)
                current_node = current_node.next_node
            print(separator.join(str(e) for e in E))
            
        def __len__(self):
            if not self.head:
                return 0
            length = 0
            current_node = self.head
            while current_node.next_node:
                length += 1
                current_node = current_node.next_node
            return length 
        
        def append(self, value):
            new_node = Node(value)
            if not self.head:
                self.head = new_node
                return
            current_node = self.head
            while current_node.next_node:
                current_node = current_node.next_node
            current_node.next_node = new_node
        
        def insert_at_beginning(self, value):
            new_node = Node(value)
            if not self.head:
                self.head = new_node
                return
            new_node.next_node = self.head
            self.head = new_node
        
        def insert_value_before(self, value_1, value_2):
            if not self.head:
                return False
            if self.head.value == value_2:
                new_node = Node(value_1)
                new_node.next_node = self.head
                self.head = new_node
                return True
            current_node = self.head
            while current_node.next_node and
                 current_node.next_node.value != value_2:
                current_node = current_node.next_node
            if current_node.next_node and
                current_node.next_node.value == value_2:
                new_node = Node(value_1)
                new_node.next_node = current_node.next_node
                current_node.next_node = new_node
                return True
            return False    
        
        def is_sorted(self):
            if len(self) < 2:
                return True
            current_node = self.head
            while current_node.next_node:
                if self.key(current_node.value) >
                    self.key(current_node.next_node.value):
                    return False
                current_node = current_node.next_node
            return True
        
        def reverse(self):
            self.display()
            if len(self) < 2:
                return
            current_node = self.head
            while current_node.next_node.next_node:
                current_node = current_node.next_node
            last_node = current_node.next_node
            current_node.next_node = None
            self.reverse()
            last_node.next_node = self.head
            self.head = last_node
            
    LL = LinkedList([1, 10, 4, 6])
    LL.display()
    print('--------------------')
    print(LL.is_sorted())
    LL.reverse()
    print('--------------------')
    LL.display()
    LL.display('---')
    LL.display()
    print(len(LL))
    LL.append(7)
    LL.display()
    LL.insert_at_beginning(23)
    LL.display()
    LL.insert_value_before(-10, 1)
    LL.display()
    LL.insert_value_before(63, 10)
    LL.display()
    print(LL.head.value)
    print(LL.head.next_node.value)
    print(LL.head.next_node.next_node.value)
    
  • 相关阅读:
    【学习总结】 小白CS成长之路
    Java程序员面试题收集(1)
    ECSTORE2.0 去页面底部版权
    vue-cli安装
    linux下安装nodejs
    Access denied for user 'root'@'localhost' (using password: YES)的解决
    想说的话
    十三:CSS之CSS的四种使用方法和优先级
    十二:CSS之基础语法
    十一:HTML之实现基本网页结构
  • 原文地址:https://www.cnblogs.com/alex-bn-lee/p/9672472.html
Copyright © 2011-2022 走看看