Python基础知识之函数,类,模块

目录
  • 1、Function 函数
    • 1)定义函数
    • 2)参数设置
    • 3)全局和局部变量
  • 2、Class类
    • 1)定义class
    • 2)class的功能
    • 3)继承
    • 4)私有属性和功能
    • 5)特殊方法
  • 3、Module模块
    • 1)引用module
    • 2)大项目的模块管理
  • 总结

1、Function 函数

编程中,需要重复写的功能,可以包装成一个函数

1)定义函数

定义函数之前,实现给一个字符串增加前缀和后缀的操作:

f1 = "f1"
f2 = "f2"
f1 += ".txt"
f1 = "my_" + f1
f2 += ".txt"
f2 = "my_" + f2
print(f1, f2)
my_f1.txt my_f2.txt

定义函数之后:

def modify_name(filename):
    filename += ".txt"
    filename = "my_" + filename
    print(filename)
modify_name("f1")
modify_name("f2")
my_f1.txt
my_f2.txt

上述函数里面用到了参数,调用的时候需要进进行传参数,但有时也可以没有参数,eg:

def modify_name():
    filename = "f1"
    filename += ".txt"
    filename = "my_" + filename
    print(filename)
modify_name()
my_f1.txt

一个函数也可以拥有返回值,将函数处理后,可以将想要返回的结果返回

def modify_name(filename):
    filename += ".txt"
    filename = "my_" + filename
    return filename
new_filename = modify_name("f1")
print(new_filename)
my_f1.txt

2)参数设置

调用函数时,如果函数有参数,那么需要给函数传参,函数本来的参数叫实参,传入的参数叫实参,参数传递有以下几种方式:

def f(x, a, b, c):
    return a*x**2 + b*x + c*1

print(f(2, 1, 1, 0))    # 忽略参数名,需要按顺序一一对应
print(f(x=2, a=1, b=1, c=0))    # 写上参数名,按名字传参
print(f(a=1, c=0, x=2, b=1))    # 若用参数名,可以打乱顺序传参
6
6
6

另外,对于不是一直变化的参数,可以给参数设置一个默认值,如果设置了默认值,传参时可以不给改参数传值,否则每个参数都要传参成功才能调用

def f(x, a=1, b=1, c=0):
    return a*x**2 + b*x + c*1

print(f(2, a=2))
print(f(2))
10
6

Tip: 设置了默认值的参数和未设置默认值的参数要分开放,也就是说不可以将未设置默认值的参数跟在设置了默认值参数的后面

3)全局和局部变量

  • 全局变量(global):函数里外都能用(公用)
  • 局部变量(local):仅在函数内使用(私用)
def modify_name():
    filename = "f1.txt"	# 这里就是一个局部变量
    print("local filename:", filename)
modify_name()
print("global filename:", filename) # 这里会报错
filename = "f1.txt"	# 这里便是一个全局变量
def modify_name():
    print("local filename:", filename)
modify_name()
print("global filename:", filename)
  • 全局变量和局部变量冲突时,局部变量优先!!!
filename = "f1.txt"
def modify_name():
    filename = "f2.txt"
    print("local filename:", filename)
modify_name()
print("global filename:", filename)
local filename: f2.txt
global filename: f1.txt
  • 特殊情况:允许内部来修改外部的值,必须使用global声明,相当于提出了一个申请
filename = "f1.txt"

def modify_name():
    global filename  # 提出申请
    filename = "f2.txt"
    print("local filename:", filename)

modify_name()
print("global filename:", filename)
local filename: f2.txt
global filename: f2.txt

2、Class类

目的:为了描述一个或一类具体的物体,eg:猫的特征,动作等

1)定义class

使用class File来创建一个类,注意通常约定类的名字要首字母大写。

然后使用my_file = File()来创建一个实例,每个实例都继承了一个类的基本属性

class File:
    def __init__(self):
        self.name = "f1"
        self.create_time = "today"

my_file = File()
print(my_file.name)
print(my_file.create_time)
f1
today
  • 其中 self 是作为类自己的一个索引,不管你在定义类的时候,想要获取这个类的什么属性或功能,都可以通过self来获取。
  • __init__():创建一个实例的时候,类都会自动进行一次初始化,即运行一遍__init__()函数
  • 修改属性的值:(但这样修改的值,仅对当前实例有效)
my_file.name = "new_name"
print(my_file.name)
new_name

2)class的功能

  • __init__():也可以对该函数进行传参:
class File:
    def __init__(self, name, create_time="today"):
        self.name = name
        self.create_time = create_time

my_file = File("my_file")
print(my_file.name)
print(my_file.create_time)
my_file
today
  • 还可以定义更多的功能,比如重命名等
class File:
    def __init__(self, name, create_time="today"):
        self.name = name
        self.create_time = create_time
    def change_name(self, new_name):
        self.name = new_name

my_file = File("my_file")
my_file.change_name("new_name")
print(my_file.name)
new_name
  • 而且类的功能也可以有返回值
class File:
    def __init__(self, name, create_time="today"):
        self.name = name
        self.create_time = create_time
    def get_info(self):
        return self.name + " is created at " + self.create_time

my_file = File("my_file")
print(my_file.get_info())
my_file is created at today

3)继承

  • 俩个类分开写,eg:
class Video:
    def __init__(self, name, window_size=(1080, 720)):
        self.name = name
        self.window_size = window_size
        self.create_time = "today"

class Text:
    def __init__(self, name, language="zh-cn"):
        self.name = name
        self.language = language
        self.create_time = "today"

可以发现,这俩个类是有共性的,比如都有name,和create_time

所以,可以编写一个底层类,使得这俩个类继承底层类,从而减少了类之间的共有属性/功能的重复开发!!!

一个类可以继承另一个类,从而使得这个类成为子类,被继承的类为父类

子类可以继承父类的功能/功能,而且子类还可以重定义父类的功能

class File:
    def __init__(self, name, create_time="today"):
        self.name = name
        self.create_time = create_time
    def get_info(self):
        return self.name + " is created at " + self.create_time

class Video(File):
    def __init__(self, name, window_size=(1080, 720)):
        # 将共有属性的设置导入File父类
        super().__init__(name=name, create_time="today")
        self.window_size = window_size

class Text(File):
    def __init__(self, name, language="zh-cn"):
        super().__init__(name=name, create_time="today")
        self.language = language
    # 也可以在子类中复用父类功能
    def get_more_info(self):
        return self.get_info() + ", using language of " + self.language

v = Video("my_video")
t = Text("my_text")
print(v.get_info())  # 调用父类功能
print(t.create_time)  # 调用父类的属性
print(t.language)  # 调用自己的属性
print(t.get_more_info())  # 调用自己复用父类的功能
my_video is created at today
today
zh-cn
my_text is created at today, using language of zh-cn

4)私有属性和功能

  • 私有:_一个下划线开头,弱隐藏,不想让别人用,但别人在必要情况下还是可以用的
  • 私有:__俩个下划线开头,强隐藏,不让别人使用
class File:
    def __init__(self):
        self.name = "f1"
        self.__deleted = False  # 不让别人使用这个变量
        self._type = "txt"  # 不想别人使用这个变量
    def delete(self):
        self.__force_delete()
    def __force_delete(self):   # 不让别人使用这个功能
        self.__deleted = True
        return True
    def _soft_delete(self):  # 不想让别人使用这个功能
        self.__force_delete()  # 虽然是强隐藏,但是可以在内部随便调用
        return True

f = File()
print(f._type)  # 可以拿到值,但是会有⚠️
print(f._soft_delete())  # 可以调用,但是会有⚠️
print(f.__deleted)  # 会直接报错
print(f.__force_delete)  # 会直接报错

5)特殊方法

定义 含义
def __init__() 初始化实例
def __repr__() 字符串的“官方”表现形式
def __str__() 字符串的“非正式”值
def __iter__() 遍历某个序列
def __next__() 从迭代器中获取下一个值

3、Module模块

Moudel主要是为一个相对比较大的工程,涉及到多个文件之间的互相调用关系。

  • 对于一个项目来说,它需要去实现很多功能,这时候,如果可以把某一个或者某一类功能分类写到了一个文件之中,在合并的时候,我不便不需要知道文件中的代码具体什么,我只需要调用你给的这个文件中的功能就可以!也
  • 就是说,作为你所给文件中的功能的使用者,我不关心你实现功能的代码,我只关系我可以使用函数调用到你这个功能就好
# file.py
def create_name():
  return "new_file.txt"

eg: 比如上述file.py文件,实现了create_name的功能,然而作为这个功能的使用者,我不需要去了解这个功能所使用的代码,我只关心如何调用使用这个功能

1)引用module

比如新建了一个me.py,需要在这个文件之中引用file.py中的create_name()的功能

# me.py
import file
print(file.create_name())
new_file.txt

或者也可以这样调用

# me.py
import file as f1
print("f1:", f1.create_name())
class File:
  def create_name(self):
    return "new_file.txt"
f2 = File()
print("f2:", f2.create_name())
f1: new_file.txt
f2: new_file.txt

可以发现,这和类功能调用有着非常大的相似之处!!!

还有更多的引用方式:

# me.py
from file import create_name
print(create_name())
new_file.txt

假设file.py中还有一个函数create_time()

# me.py
from file import create_name, create_time
print(create_name())
print(create_time())
new_file.txt
today

如何file.py中函数太多,记不清,那么可以如此引用:

# me.py
# 第一种
import file
print("1", file.create_name())
#第二种
from file import *
print("2", create_name())
print("2", create_time())

2)大项目的模块管理

在正规的module中,我们常会看到一个__init__.py文件,就像class里的def __init__(self),可以在里面写上如何初始化你的files目录,也可以设定目录中各元素的关系。

# files/__init__.py
from .video import get_video_size

设置好__init__.py后,就可以直接从files里import get_video_size这个属于video.py的功能了

# me.py
from files import get_video_size
print(get_video_size())

但和video.py同级的text.py就无法通过import方式获取到text.py中的功能,因为未在files/__init__.py中声明

# me.py
from files import create_name

如果不在files/__init__.py中声明,但还想调用,则可以使用:

# me.py
import files.text
print(files.text.create_name)
# 或者
from files import text
print(text.create_name)

总结

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注我们的更多内容!

(0)

相关推荐

  • python常用模块详解

    目录 一.模块概述 二.模块内容 三.模块导入的原理 四.模块导入的方法 五.random模块 六.time模块 (1)python表示时间的三种格式 (2)常用方法: (3)时间元组.时间戳.格式化字符串转换 总结 一.模块概述 模块指的是包含python代码的文件,也就是一个.py文件就是一个模块.文件夹(directory)---->包(package),是一种特殊的模块.模块名要符合标识符的命名规范,以字母开头,且不能和自带的模块重名.模块第一次被导入时会先执行模块本身,多次导入只有第一

  • 对python中不同模块(函数、类、变量)的调用详解

    首先,先介绍两种引入模块的方法. 法一:将整个文件引入 import 文件名 文件名.函数名( ) / 文件名.类名 通过这个方法可以运行另外一个文件里的函数 法二:只引入某个文件中一个类/函数/变量 需要从某个文件中引入多个函数或变量时,用逗号隔开即可 from 文件名 import 函数名,类名,变量名 接下来,通过一个具体的例子说明引入 模块的具体方法: 假设新建一个python包test2,里边有一个名为run.py的python文件,run.py文件里有一个名为running()的函数

  • python 类相关概念理解

    目录 什么是类,对象,实例,类## 标题变量(类属性),实例变量(实例属性) 类变量和类属性的分类 类调用实例方法 类的封装(enclosure),继承和多态 迭代,迭代器(iterator),可迭代对象(iterable object),生成器(generator) 总结 什么是类,对象,实例,类## 标题变量(类属性),实例变量(实例属性) 面向对象编程(Object-oriented Programming,简称 OOP),是一种封装代码的方法.比如说,将乱七八糟的数据扔进列表中,这就是一

  • Python format函数详谈

    目录 Python字符串的format函数 总结 Python字符串的format函数 format()函数用来收集其后的位置参数和关键字段参数,并用他们的值填充字符串中的占位符.通常格式如下: '{pos or key : fill, align, sign, 0, width, .precision, type}'.format(para1...) 整个花括号是一个占位符,冒号前的位置或者关键字用来定位format函数的参数,冒号后面用来将该参数格式化,其中每一个都是可选项. 1.fill用

  • Python实现动态加载模块、类、函数的方法分析

    本文实例讲述了Python实现动态加载模块.类.函数的方法.分享给大家供大家参考,具体如下: 动态加载模块: 方式1:系统函数__import__() 方式2:imp, importlib 模块 方式3:exec 函数 动态加载类和函数 首先,使用加载模块,使用内置函数提供的反射方法getattr(),依次按照层级获取模块->类\全局方法->类对象\类方法. test_import_module.py class ClassA: def test(self): print('test') in

  • Python基础知识之函数,类,模块

    目录 1.Function 函数 1)定义函数 2)参数设置 3)全局和局部变量 2.Class类 1)定义class 2)class的功能 3)继承 4)私有属性和功能 5)特殊方法 3.Module模块 1)引用module 2)大项目的模块管理 总结 1.Function 函数 编程中,需要重复写的功能,可以包装成一个函数 1)定义函数 定义函数之前,实现给一个字符串增加前缀和后缀的操作: f1 = "f1" f2 = "f2" f1 += ".tx

  • Python基础知识方法重写+文件处理+异常处理

    目录 一.方法重写 二.运算符重载 三.文件处理 打开关闭文件 文件读写 四.异常处理 异常 抛出异常 最后 前言; Python基础知识+结构+数据类型 Python基础学习列表+元组+字典+集合 Python基础学习函数+模块+类 今天给大家分享的是第四篇,前面几篇我都放在上面了.小伙伴可以自己巩固复习 一.方法重写 print("-------------方法重写------------"); # coding=utf-8 class Parent: # 定义父类 def myM

  • Python基础知识_浅谈用户交互

    1.raw_input(): raw_input()是python 的内建函数,通过读取控制台的输入与用户实现交互. raw_input()可以让用户输入字符串(即等待用户输入内容),并存放到一个变量里. #!/usr/bin/env python # -*- coding:utf-8 -*- #将用户输入的内容赋值给变量user user = raw_input("请输入用户名:") #将用户输入的内容赋值给变量pwd pwd = raw_input("请输入密码:&quo

  • Python基础学习之函数方法实例详解

    本文实例讲述了Python基础学习之函数方法.分享给大家供大家参考,具体如下: 前言 与其他编程语言一样,函数(或者方法)是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段. python的函数具有非常高的灵活性,可以在单个函数里面封装和定义另一个函数,使编程逻辑更具模块化. 一.Python的函数方法定义 函数方法定义的简单规则: 1. 函数代码块以 def 关键词开头,后接函数标识符名称和圆括号(). 2. 任何传入参数和自变量必须放在圆括号中间.圆括号之间可以用于定义参数. 3.

  • Python基础知识之变量的详解

    一.定义 在python中,变量名只有在第一次出现的时候,才是定义变量.当再次出现时,不是定义变量,而是直接调用之前定义的变量. 二.命名方法 2.1小驼峰命名法 第一个单词以小写字母开始,后续单词的首字母大写 firstName , lastName 2.2大驼峰命名法 每一个单词的首字母都采用大写字母 FirstName , LastName 2.3下划线命名法 每个单词之间用下划线连接起来 first_name , last_name 三.命名规则 3.1标识符 开发人员自定义的一些符号和

  • Python基础之如何使用multiprocessing模块

    一.multiprocessing模块 multiprocessing包是Python中的多进程管理包.与threading.Thread类似,它可以使用multiprocessing.Proces 对象来创建一个进程. 该进程可以运行在Python程序内部编写的函数.该Process对象与Thread对象的用法相同,也start(),run()的方法. 此外multiprocessing包中也有Lock/Event/Semaphore/Condition类(这些对象可以像多线程那样,通过参数传

  • python基础知识之try...except...的详细用法实例

    目录 前言 1.异常类只能来处理指定的异常情况,如果非指定异常则无法处理 2.多分支 3.万能异常Exception 4.多分支+Exception 5.异常的其他机构(try…finally语法) 6.主动触发异常(raise语句) 7.自定义异常 8.断言:assert条件 9.总结try…except 补充:多重try 总结 前言 我们把可能发生错误的语句放在try模块里,用except来处理异常.except可以处理一个专门的异常,也可以处理一组圆括号中的异常,如果except后没有指定

  • 详谈Python基础之内置函数和递归

    一.内置函数 下面简单介绍几个: 1.abs() 求绝对值 2.all() 如果 iterable 的所有元素都为真(或者如果可迭代为空),则返回 True 3.any() 如果 iterable 的任何元素为真,则返回 True.如果iterable为空,则返回 False 4.callable() 如果 object 参数出现可调,则返回 True,否则返回 False 5.divmod() 以两个(非复数)数字作为参数,并在使用整数除法时返回由商和余数组成的一对数字.对于混合操作数类型,二

  • python基础知识之私有属性和私有方法

    私有权限 面向对象三大特性:封装.继承.多态 封装的意义: 将属性和方法放到一起做为一个整体,然后通过实例化对象来处理: 隐藏内部实现细节,只需要和对象及其属性和方法交互就可以了: 对类的属性和方法增加 访问权限控制. 私有权限:在属性名和方法名 前面 加上两个下划线 __ 类的私有属性 和 私有方法,都不能通过对象直接访问,但是可以在本类内部访问: 类的私有属性 和 私有方法,都不会被子类继承,子类也无法访问: 私有属性 和 私有方法 往往用来处理类的内部事情,不通过对象处理,起到安全作用.

  • Python基础知识学习之类的继承

    一.继承的格式 类的继承格式如下,括号中的为父类名. class 类名(父类名): 代码 二.单继承 下面我们让Man继承自Master类,并调用继承的showSkill方法. class Master(): def __init__(self): self.skill='炒菜' def showSkill(self): print(self.skill) class Man(Master): pass man=Man() man.showSkill() 炒菜 三.多继承 我们可以在括号中写入多

随机推荐