[Python3基础] 模块和函数、参数、异常、面向对象编程(类的方法、继承)

本文详细介绍了Python编程的基础概念,包括函数的创建与调用、参数类型、匿名函数lambda、模块导入、异常处理以及面向对象编程中的类和对象。通过实例展示了如何定义和使用函数、模块导入方式、异常捕获以及类的属性和方法,同时涵盖了单继承和多继承的使用。这些内容构成了Python编程的基础,对于初学者理解Python编程具有重要意义。
摘要由CSDN通过智能技术生成

函数

函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。

函数的创建
  • 函数代码块以 def 关键词开头,后接函数标识符名称和圆括号 ()。

  • 任何传入参数和自变量必须放在圆括号中间,圆括号之间可以用于定义参数。

  • 函数的第一行语句可以选择性地使用文档字符串—用于存放函数说明。

  • 函数内容以冒号 : 起始,并且缩进。

  • return [表达式] 结束函数,选择性地返回一个值给调用方,不带表达式的 return 相当于返回 None。

def 函数名(参数列表):
    函数体
函数的调用
#无参
def hello() :
    "可以写函数功能的介绍"
    print("Hello World!")
#有参   
def max(a, b):
    if a > b:
        return a
    else:
        return b
 
a = 4
b = 5
#函数的调用
print(max(a, b))
hello()

在这里插入图片描述

参数
  • 必需参数:必需参数须以正确的顺序传入函数。调用时的数量必须和声明时的一样。
#可写函数说明
def printme( str ):
   "打印任何传入的字符串"
   print (str)
   return
 
# 调用 printme 函数,不加参数会报错
a='sb'
printme(a)

在这里插入图片描述

  • 关键字参数:关键字参数和函数调用关系紧密,函数调用使用关键字参数来确定传入的参数值。
    使用关键字参数允许函数调用时参数的顺序与声明时不一致
#可写函数说明
def printme( str,a ):
   "打印任何传入的字符串"
   print (str)
   return
 
#调用printme函数
printme( a = "s",str = "hahah")

在这里插入图片描述

  • 默认参数:调用函数时,如果没有传递参数,则会使用默认参数。
#可写函数说明
def printinfo( name, age = 35 ):
   "打印任何传入的字符串"
   print ("名字: ", name)
   print ("年龄: ", age)
   return
 
#调用printinfo函数
printinfo( age=50, name="tom" )
print ("------------------------")
printinfo( name="bob" )

在这里插入图片描述

  • 不定长参数:声明时不会命名
    加了 * 的参数会以元组(tuple)的形式导入,存放所有未命名的变量参数。(可以传值也可以不传)
    加了两个 ** 的参数会以字典的形式导入。(可以传值也可以不传)
# 可写函数说明
def printinfo( arg1, *vartuple ):
   "打印任何传入的参数"
   print ("输出: ")
   print (arg1)
   print (vartuple)
 
# 调用printinfo 函数
printinfo( 70, 60, 50 )

在这里插入图片描述

# 可写函数说明
def printinfo( arg1, **vardict ):
   "打印任何传入的参数"
   print ("输出: ")
   print (arg1)
   print (vardict)
 
# 调用printinfo 函数
printinfo(1, a=2,b=3)

在这里插入图片描述

lambda表达式(匿名函数)

所谓匿名,意即不再使用 def 语句这样标准的形式定义一个函数。

  • lambda 函数拥有自己的命名空间,且不能访问自己参数列表之外或全局命名空间里的参数。

格式:

lambda [arg1 [,arg2,.....argn]]:expression

例子:

# 可写函数说明
sum = lambda arg1, arg2: arg1 + arg2
 
# 调用sum函数
print ("相加后的值为 : ", sum( 10, 20 ))
print ("相加后的值为 : ", sum( 20, 20 ))

在这里插入图片描述

模块

模块是一个包含所有你定义的函数和变量的文件,其后缀名是.py。模块可以被别的程序引入,以使用该模块中的函数等功能。这也是使用 python 标准库的方法。

import语句
import module1[, module2[,... moduleN]

创建一个模块(即创建一个文件,里面包含了写好的函数)

# Filename: support.py
 
def print_func( par ):
    print ("Hello : ", par)
    return

导入模块

# Filename: test.py
 
# 导入模块
import support
 
# 现在可以调用模块里包含的函数了
support.print_func("Runoob")

这样就可以使用其他模块里面的函数了!

from…import语句

导入这个模块的一部分函数

from modname import name1[, name2[, ... nameN]]

异常捕获

语法格式1:

try:
    无异常时执行的代码
except (异常类型1,异常类型2...) :
    有异常时执行的代码
except (异常类型1,异常类型2...) :
    有异常时执行的代码

语法格式2:

try:
    无异常时执行的代码
except (异常类型1,异常类型2...) :
    有异常时执行的代码
except (异常类型1,异常类型2...) :
    有异常时执行的代码
else :
    无异常时执行的代码

语法格式3:

try:
    无异常时执行的代码
except (异常类型1,异常类型2...) :
    有异常时执行的代码
except (异常类型1,异常类型2...) :
    有异常时执行的代码
else :
    无异常时执行的代码
finally :
    有无异常都会执行的代码

举例:

def disvision(a,b):
    num = a // b
    return num
try:
    numa = int(input("请输入被除数:"))
    numb = int(input("请输入除数:"))
    endnum = disvision(numa,numb)
    print(endnum)
except ZeroDivisionError:
    print("除数不能为0")
except ValueError:
    print("请输入正常的整数")
else:
    print("一切正常")
finally:
    print("一直都在")

在这里插入图片描述
异常抛出:raise [Exception [, args [, traceback]]]

x = 10
if x > 5:
    raise Exception('x 不能大于 5。x 的值为: {}'.format(x))

在这里插入图片描述

面向对象编程

类的定义格式:

class ClassName:
    <statement-1>
    .
    .
    .
    <statement-N>

类的对象:

class MyClass:
    """一个简单的类实例"""
    i = 12345
    def f(self):      #self代表类的实例
        return 'hello world'
 
# 实例化类
x = MyClass()
 
# 访问类的属性和方法
print("MyClass 类的属性 i 为:", x.i)
print("MyClass 类的方法 f 输出为:", x.f())

在这里插入图片描述
类的属性和方法:

在类的内部,使用 def 关键字来定义一个方法,与一般函数定义不同,类方法必须包含参数 self, 且为第一个参数,self 代表的是类的实例。
类的私有方法定义和属性一样,调用也一样
如果想让类名直接调用方法,就在方法上面加一个装饰器@classsmethod,或者是加@staticmethod声明为静态方法(函数),这时候里面就不用加self了
装饰器就是在函数代码不变的情况下,增加一些其他功能(在代码运行期间动态增加功能的方式叫做装饰器)

@classmethod
def run(self):
    print("running")
# 相当于这么调用的
run = classmethod(run)

类的属性分为公有属性(类中和类外都可以调用)和私有属性(在类外不能直接调用,可以由类的方法调用,也可以由实例化对象._类名__属性名这样调用)
以双下划线开始的成员变量为私有属性,否则为公有属性
内置属性:前后由两个下划线组成,默认添加的,例如:构造函数

#类定义
class people:
    #定义基本属性
    name = ''
    age = 0
    #定义私有属性,私有属性在类外部无法直接进行访问
    __weight = 0
    #定义构造方法(实例化类时会执行)
    def __init__(self,n,a,w):
        self.name = n
        self.age = a
        self.__weight = w
    def speak(self):
        print("%s 说: 我 %d 岁。" %(self.name,self.age))
 
# 实例化类
p = people('bob',10,30)
p.speak()

在这里插入图片描述
单继承格式:

class DerivedClassName(BaseClassName1):
    <statement-1>
    .
    .
    .
    <statement-N>

举例:

#类定义
class people:
    #定义基本属性
    name = ''
    age = 0
    #定义私有属性,私有属性在类外部无法直接进行访问
    __weight = 0
    #定义构造方法
    def __init__(self,n,a,w):
        self.name = n
        self.age = a
        self.__weight = w
    def speak(self):
        print("%s 说: 我 %d 岁。" %(self.name,self.age))
 
#单继承示例
class student(people):
    grade = ''
    def __init__(self,n,a,w,g):
        #调用父类的构函
        people.__init__(self,n,a,w)
        self.grade = g
    #覆写父类的方法
    def speak(self):
        print("%s 说: 我 %d 岁了,我在读 %d 年级"%(self.name,self.age,self.grade))
 
 
 
s = student('ken',10,60,3)
s.speak()
print(s.__weight)

在这里插入图片描述
多继承格式:

class DerivedClassName(Base1, Base2, Base3):
    <statement-1>
    .
    .
    .
    <statement-N>

注意:需要注意圆括号中父类的顺序,若是父类中有相同的方法名,而在子类使用时未指定,python从左至右搜索
即方法在子类中未找到时,从左到右查找父类中是否包含方法。

举例:

#类定义
class people:
    #定义基本属性
    name = ''
    age = 0
    #定义私有属性,私有属性在类外部无法直接进行访问
    __weight = 0
    #定义构造方法
    def __init__(self,n,a,w):
        self.name = n
        self.age = a
        self.__weight = w
    def speak(self):
        print("%s 说: 我 %d 岁。" %(self.name,self.age))
 
#单继承示例
class student(people):
    grade = ''
    def __init__(self,n,a,w,g):
        #调用父类的构函
        people.__init__(self,n,a,w)
        self.grade = g
    #覆写父类的方法
    def speak(self):
        print("%s 说: 我 %d 岁了,我在读 %d 年级"%(self.name,self.age,self.grade))
 
#另一个类,多重继承之前的准备
class speaker():
    topic = ''
    name = ''
    def __init__(self,n,t):
        self.name = n
        self.topic = t
    def speak(self):
        print("我叫 %s,我是一个演说家,我演讲的主题是 %s"%(self.name,self.topic))
 
#多重继承
class sample(speaker,student):
    a =''
    def __init__(self,n,a,w,g,t):
        student.__init__(self,n,a,w,g)
        speaker.__init__(self,n,t)
 
test = sample("Tim",25,80,4,"Python")
test.speak()   #方法名同,默认调用的是在括号中排前地父类的方法

在这里插入图片描述
方法重写:

class Parent:        # 定义父类
   def myMethod(self):
      print ('调用父类方法')
 
class Child(Parent): # 定义子类
   def myMethod(self):
      print ('调用子类方法')
 
c = Child()          # 子类实例
c.myMethod()         # 子类调用重写方法
super(Child,c).myMethod() #用子类对象调用父类已被覆盖的方法

在这里插入图片描述

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值