这一块应该没有什么难度的,但是对于初学小白来说也是非常重要的知识点

一些小的层面的

函数常用的一些操作:
调用函数
定义函数
函数的参数
递归函数
函数的高级特性:(印象笔记也整理了一部分,这里相当于是二次整理,只不过可能更加的详细了)

  1. 切片
  2. 迭代
  3. 列表生成式
  4. 生成器
  5. 迭代器

函数式编程:

大的层面方向的

Python函数调用时,参数的传递方式
详细内容移步:https://www.cnblogs.com/downey-blog/p/10483216.html 有兴趣的话后面再吗,慢慢的去结合起来进行全方面的深度理解。

对于C程序员来说,我们都知道C在函数调用时,采用的是值传递,即形参和实参分配不同的内存地址,在调用时将实参的值传给实参,在这种情况下,在函数内修改形参并不会影响到实参,但是这样带来一个问题,如果我们需要刻意地对实参进行修改,就不得不传递实参的指针到函数,然后在函数中修改指针指向的数据,以达到修改实参的目的。

后来,C++中引入了引用这个概念,即在函数定义时,在形参前加一个&符号,表示传递参数的引用,在写法上,除了多出一个&符号,其他部分和C中传值调用一样,但是实际确是达到了可以在函数内修改实参内容的目的。这种参数传递的方式被称为传引用。

python的参数传递

关于各个函数的调用的问题
以及各个循环之间的参数是否互不影响的问题??这也是我在做算法题遇到的一些很小的问题

python类中函数调用要加self

参考链接:
https://www.cnblogs.com/jessonluo/p/4717140.html
https://blog.csdn.net/stuscs/article/details/40110815
python中的类方法也是一种对象,既可以通过实例也可以通过类来访问方法,再python里面有两种风格

  1. 未绑定的类方法:没有self
    通过类来引用方法返回一个未绑定方法对象。要调用它,你必须显示地提供一个实例作为第一个参数。
  2. 绑定的实例方法:有self
    通过实例访问方法返回一个绑定的方法对象。Python自动地给方法绑定一个实例,所以我们调用它时不用再传一个实例参数。
    两者的区别:两种方法都是对象,它们可以被传递、存入列表等待。两者运行时都需要一个实例作为第一参数(给予一个self值),但当通过一个实例调用一个绑定方法时Python自动会提供一个。
    对象调用方法时, 实际上是通过类调用的a = muffedcalculator()a.calc(expr)
    实际上是这样调用的 muffledcalculator.calc(a, expr)这样self 就是 a, python隐含地把a 传进方法 替代了self, 就成了绑定的方法, 就可以执行了. 否则就是非绑定方法(这种方式虽然很抽象,但是子集读了几遍之后大概是理解了,self就像是一个替代品一样)
    self代表类的实例,而非类
class Test:
    def prt(self):
        print(self)
        print(self.__class__)

t = Test()
t.prt()
# 运行结果
# <__main__.Test object at 0x000000000284E080>
# <class '__main__.Test'>

从上面的例子中可以很明显的看出,self代表的是类的实例。而self.__class__则指向类。(没有太懂)
self不必非写成self

class Test:
    def prt(this):
        print(this)
        print(this.__class__)

t = Test()
t.prt()
# 运行结果不变

self是否可以不写

class Test:
    def prt():
        print(self)

t = Test()
t.prt()
# 运行提示:prt() takes 0 positional arguments but 1 was given(prt在定义的时候没有参数,但是我们运行的时候强行传入了一个参数。t.prt()通过python解释成:Test.prt(t),程序提醒我们多传入了一个参数t)

如果我们在定义和调用的时候都不传入实例,就是属于类方法

class Test:
    def prt():
        print(__class__)
Test.prt()
# 输出:<class '__main__.Test'> 

在继承时,传入的是哪个实例,就是那个传入的实例,而不是指定义了self的类的实例

# 定义父类
class Parent:
    # 定义了一个pprt()函数
    def pprt(self):
        print(self)

# 定义一个child类
class Child(Parent):
    # 定义了一个cprt()函数
    def cprt(self):
        print(self)

c = Child()
c.cprt()
# 输出结果:<__main__.Child object at 0x0000000002A47080>
# 指的是child类的实例
c.pprt()
# 输出结果:<__main__.Child object at 0x0000000002A47080>
# 等同于child.pprt(c),self依然是child类的实例,由于self中没有定义pprt()方法,所以沿着继承树往上找,发现在父类Parent中定义了pprt()方法,所以就会成功调用。
p = Parent()
p.pprt()
# 输出结果:<__main__.Parent object at 0x0000000002A47240>


ToTOP