小白python入门(三)- 函数,类,模块,包

这篇博客详细介绍了Python的基础知识,包括函数的创建与调用,参数传递特性,以及如何动态绑定属性和方法。接着讨论了类的创建、实例化,以及封装、继承和多态的概念。还提到了模块和包的使用,以及如何导入和使用内置函数如`isinstance()`和`dir()`。此外,文章强调了Python作为动态语言的灵活性,并探讨了代码的可扩展性和封闭性原则。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

14.函数

def calc(a ,b):'''创建'''
    c=a-b
    return c;


calc1 = calc(10, 20)'''调用'''
calc2 =calc(b=50,a=60)
print(calc1)
print(calc2)


在函数调用过程中,进行参数的传递
如果是不可变对象,在函数体的修改不会影响实参的值 arg1的修改为100,不会影响n1的值
如果是可变对象,在函数体的的修改会影响到实参的值arg2的修改,append(10),会影响到n2的值
函数的返回值
(1)如果函数没有返回值【函数执行完毕之后,不需要给调用处提供数据】return可以省略不写

(2)函数的返回值,如果是1个,直接返回类型
(3)函数的返回值,如果是多个,返回的结果为元组
请添加图片描述

请添加图片描述

可以查看print

print(self, *args, sep=' ', end='\n', file=None)

end 默认换行

  • 个数可变的位置参数
def p(*args):
    print(args)
    #print(args[0]) #作为一个元组来使用
    
p(20,20,30)
p(20)
lst=[10,20,30]
p(*lst) #在函数调用时,将列表中的每个元素都转换为位置实参传入
#(20, 20, 30)
#(20,)
#(10, 20, 30)

#eg:
print(self, *args, sep=' ', end='\n', file=None)
位置参数
  • 个数可变的关键字参数
def fun(** args):
    print(args)
    
fun(a=10)
fun(a=20,b=30,c=60)
dic={'a':111,'b':222,'c':333}
fun(**dic)#在函数调用时,将字典中的键值对都转换为关键字实参传入
#{'a': 10}
#{'a': 20, 'b': 30, 'c': 60}
#{'a': 111, 'b': 222, 'c': 333}

以上两个个数可变的参数一个函数只能定义一个

两个同时使用时,要求 个数可变的位置参数 在 个数可变的关键字参数之前

请添加图片描述

如果不加* 三种方法都可以

15.类

1)创建语法
class Student:
    pass
print(id(Student)) #已经开辟空间了
print(type(Student))
print(Student)
'''
2450633353136
<class 'type'>
<class '__main__.Student'>
'''

定义在类里的函数就是

请添加图片描述

2)实例调用

创建的实例对象中 会有一个类指针指向类

  • 对象名.方法名
  • 类名.方法名(类的对象)#就是定义处的self

请添加图片描述

  • 类属性

请添加图片描述

  • 类方法

请添加图片描述

类方法和静态调用:

Studet.cm() #cls是不需要传入的
Studet.method()
3)动态绑定属性与方法

python是动态语言,创建对象后可以动态绑定属性与方法

  • 动态绑定属性
    eg:对象添加一个属性
class Student:
    def __init__(self,name,age):
        self.name=name
        self.age=age
    def eat(self):
        print(self.name+'在吃饭')

stu1=Student('张三',20)
stu1.gender='女'
print(stu1.gender,stu1.name,stu1.age)
  • 动态绑定方法请添加图片描述
class Student:
    def __init__(self,name,age):
        self.name=name
        self.age=age
    def eat(self):
        print(self.name+'在吃饭')
def show():
    print("定义在类外的 称为方法")
stu1.s=show()
stu1.s
4) 封装,继承,多态
  • python没有修饰符来标识属性的私有 可以使用两个 _

​ 只有内部可以访问,外部不能访问
请添加图片描述

(靠程序员的自觉)

  • 默认继承object类

    class Animal(object):
    

    后面的括号写父类

    子类和父类有同名方法时 子类覆盖父类

    • 判断一个变量是否是某个类型及父继承链
	isinstance(c, Dog) #与Java类似
  • 开闭原则

    • 对扩展开放

      可以新增子类继承父类,覆盖父类的方法

    • 对修改封闭

      不可以修改 依赖父类的类型(父类类型做传入参数)的方法

16.模块

.py结尾的文件 就可以作为模块

包中有模块

  • 代码复用
  • 分工合作开发
  • 避免命名重复

请添加图片描述

  • 常用内置模块
    • sys
    • time
    • os
    • calendar(日期相关各种函数标准库)
    • urllib(读取服务器的数据标准库)
    • json
    • re
    • math
    • decimal
    • logging
  • 导入第三方包

17.包

Python中的包

  • 包是一个分层次的目录结构,它将一组功能相近的模块组织在一起

  • 作用

代码规范
避免模块名称冲突·

  • 包与目录的区别
    包含__init_ .py文件的目录称为包·目录里通常不包含_init_.py文件

  • 包的导入
    import包名.模块名 as 别名

  • 使用from…import 可以导入包,模块,函数,变量

内置函数

1.isinstance

有时候可以代替type()

判断它是不是 某个类的对象

判断是不是 多个类其中一个的对象

isinstance('a', str)

isinstance([1, 2, 3], (list, tuple))
True
isinstance((1, 2, 3), (list, tuple))
True
2.dir()

获取一个对象的所有属性和方法

>>> dir('ABC')
['__add__', '__class__',..., '__subclasshook__', 'capitalize', 'casefold',..., 'zfill']
#__add__  命名的是有特殊用途的 比如__len__方法返回长度
>>> hasattr(obj, 'x') # 有属性(方法和变量)'x'吗?
True
>>> obj.x
9
>>> hasattr(obj, 'y') # 有属性'y'吗?
False
>>> setattr(obj, 'y', 19) # 设置一个属性'y'
>>> hasattr(obj, 'y') # 有属性'y'吗?
True
>>> getattr(obj, 'y') # 获取属性'y'
19
>>> obj.y # 获取属性'y'
19
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值