【从零学Python_1.5】自定义函数和类

函数格式: 

def  函数名 ( 参数 ) :

        函数体

# 自定义函数
def func(a, b):
    return a + b

# 调用函数
func(1, 2)

函数参数:

参数类型:

  • 可变类型参数:在函数内部对传入参数的修改会影响到外部变量。
  • 不可变类型参数:在函数内部对传入参数的修改不会影响到外部变量。
def func1(num):
    num * 10

num1 = 10
func1(num1)
print(num1)     # 10


def func2(lst):
    lst[0] *= 10

lst1 = [10]
func2(lst1)
print(lst1[0])  # 100

默认参数:

设置默认参数时,必选参数在前默认参数在后

def func3(num1, num2=10):
    print(num1 + num2)

func3(1, 2)     # 3
func3(1)        # 11

可变参数:

可变参数/不定长参数,可以输入任意个参数,在函数内作为元组Tuple使用

def func4(*nums):
    sum = 0
    for num in nums:
        sum += num
    return sum

print(func4(1, 2, 3))       # 6
print(func4(1, 2, 3, 4))    # 10

关键字参数:

指定参数名传参,不一定按固定顺序

def func5(name, age):
    print(name, age)
    
func5(age=18, name="XiaoMing")

函数返回值:

函数都有返回值,默认返回None

匿名函数:

Lambda表达式

func6 = lambda a, b: a + b

print(func6(1, 2))    # 3

类格式:

class 类名(基类):

默认自动继承object类。 

class TestClass:
    name = "Test Class"

# 实例化
test = TestClass()
print(test.name)

类的属性:

  • 公有属性:在类中和类外都可以调用,属性默认为公有属性;
  • 私有属性:只能在类内调用,属性命名以双下划线"__"开始;
  • 内置属性:系统自带属性,以双下划线开头,且以上下划线结尾。

类的函数:

  • 公有函数:可以在类内调用,也可以外部通过实例调用,函数默认为公有函数;
  • 私有函数:只能在类内调用,函数命名以双下划线"__"开始;
  • 类函数:可以在外部通过类名或实例调用,被classmethod函数调用,或使用@classmethod修饰;
  • 静态函数:可以类内调用,也可以在外部通过类名或实例调用,被staticmethod函数调用,或使用@staticmethod修饰,不需要self语句。
class TestClass:
    publicname = "PublicName"
    __privatename = "PrivateName"

    def testfunc1(self):
        print(self.publicname)

    def testfunc2(self):
        print(self.__privatename)

    def __testfunc3(self):
        print(self.publicname)

    def __testfunc4(self):
        print(self.__privatename)

    def testfunc55(self):
        print(self.publicname)

    testfunc5 = classmethod(testfunc55)

    @classmethod
    def testfunc6(cls):
        print(cls.publicname)

    def testfunc77():
        print("static func")

    testfunc7 = staticmethod(testfunc77)

    @staticmethod
    def testfunc8():
        print("static func")

    testfunc7()
    testfunc8()


# 实例调用
testclass = TestClass()
print(testclass.publicname)
testclass.testfunc1()
testclass.testfunc2()
testclass.testfunc5()
testclass.testfunc6()
testclass.testfunc7()
testclass.testfunc8()

# 类名调用
TestClass.testfunc5()
TestClass.testfunc6()
TestClass.testfunc7()
TestClass.testfunc8()

猜你喜欢

转载自blog.csdn.net/qq_39108767/article/details/125248123