Python笔记:class, __init__函数,self | 嵌套函数和递归函数

Python 笔记

class,__init__函数,self

1. class

class是类,可理解为一个抽象模板

2. __init__函数

  • __init__是一个内置函数, 用两个下划线开头表示该函数为私有,不能被外类的外部被使用或访问
  • __init__方法的第一参数永远是self,表示创建的类实例本身
  • self.val = val即在__init__方法内部,把val绑定到self,表示ListNode类的属性变量

3. self

self是 __init__方法的第一参数,表示创建的类本身

#定义ListNode类
class ListNode:  #class是类,抽象模板
     def __init__(self, val=0, next=None):  #__init__方法的第一参数永远是self,表示创建的类实例本身
         self.val = val  #在__init__方法内部,把val绑定到self,表示ListNode类的属性变量
         self.next = next
#定义Rectangle来求周长和面积
class Rectangle():
    def __init__(self,a,b):
        self.a = a
        self.b = b
    def getPeri(self): #Rectangle类下的其中一个函数
        return (self.a + self.b)*2
    def getArea(self):
        return self.a * self.b

#类的取用
rect = Rectangle(3,4)
print(rect.getPeri())
print(rect.getArea())
print(rect.__dict__)  #得到Rectangle类的属性

嵌套函数和递归函数

嵌套函数:在一个函数里面嵌套了另一个函数

嵌套函数:在一个函数里面嵌套了另一个函数

  • 注意:无法在外部函数外直接调用内部函数
def func(foo):
    print(1)
    foo()
    print(3) 
def a():
    print(2)
b = func(a)
print(b) 

运行结果应为:
1#先运行func()第一行
2#运行func()第二行,即调用a()
3#第二行运行完,运行第三行
None #函数默认返回 None,赋值给 b

递归函数:在一个函数在内部调用自身本身

例如,求 f a c t ( n ) = n ! = 1 ∗ 2 ∗ 3 ∗ . . . ∗ ( n − 1 ) ∗ n = ( n − 1 ) ! ∗ n = f a c t ( n − 1 ) ∗ n fact(n) = n! = 1 * 2 * 3 * ... * (n-1) * n = (n-1)! * n = fact(n-1) * n fact(n)=n!=123...(n1)n=(n1)!n=fact(n1)n
所以,fact(n)可以表示为 n * fact(n-1),只有n=1时需要特殊处理。于是,fact(n)用递归的方式写出来就是:

def fact(n):
	if n==1:
		return 1
	return n * fact(n - 1)

另一个稍复杂的例子:Leetcode中Q203.移除链表元素 - 递归法

class Solution:
    def removeElements(self, head: Optional[ListNode], val: int) -> Optional[ListNode]:
        if head is None: #先定义好边界
            return head
        head.next = self.removeElements(head.next,val) #使用递归函数
        #相当于利用递归快速到达链表尾端,从后往前依次进行判断,用删除头节点的方式依次删除
        #每次递归返回的时当前递归层的head(若head值不等于val),或head.next(若当前head值等于val)
        if head.val == val: #若当前head值等于val
            head = head.next
        else: #若head值不等于val
            head = head
        return head
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值