Python以及基础语法保姆级教程(超详细)-3

简介: Python以及基础语法保姆级教程(超详细)

Python以及基础语法保姆级教程(超详细)-2

https://developer.aliyun.com/article/1537716


五 函数

5.1 什么是函数?

函数:封装具有某种功能的代码块

自定义函数:将一段有规律的,可以重复使用的代码定义成函数,一次编写,多次调用

上面提到的函数:len() range() type() print() input()…这一些都是内置函数,可以直接使用的函数

5.2 函数的定义

#定义函数
def 函数名():
    函数体(就是函数具体功能的代码)
#调用函数
函数名()
# 定义函数
def fun1():
    print('这是我的第一个函数')
    print('hello')
# 调用函数
fun1()

5.3 函数的参数

格式:

#定义函数
def 函数名(形式参数/形参):
    函数体(就是函数具体功能的代码)
#调用函数
函数名(实际参数/实参)
def fun2(a):
    print(a)
name = '小明'
fun2(name)

形式参数(形参):就是一个参数名,没有任何数值,在函数里面, 形参就位于定义函数的括号内

实际参数(实参):有实际的数值,位于调用函数时函数名后面的括号内

函数在实现参数和调用参数的过程叫做:传递参数(传参)

5.4 参数的分类

5.4.1 必须参数

就是必须按照正确的顺序来将实际参数传入到函数中

def hello(name):
    print(f'hello,我叫{name}')
hello('小明')

形参和实参的数量要一致

注意函数参数的位置,实参和形参必须一一对应

5.4.2 默认参数

在函数定义的时候,就写好了参数值,在后续调用参数就可以不用传参.如果在使用调用函数的时候传入参数,原来的参数值就会被覆盖

def name(n='小明'):
    print(f'我的名字是{n}')
name()
name('小红')  # 第二次调用传参把原来的参数值给覆盖了
# 我的名字是小明
# 我的名字是小红

注意: 定义默认参数的很好,一定要注意参数的位置–>默认参数一定要做必须参数的后面

5.4.3 关键字参数

就是在函数传入参数的时候,可以通过参数名来指定

格式:参数名= 参数值

def info(name,age):
    print(f'姓名:{name}')
    print(f'年龄:{age}')
info(age=18,name='小明')
"""
姓名:小明
年龄:18
"""

不需要担心参数的位置

5.4.4 可变长参数
5.4.4.1 单星号可变

在参数名前加一个*,该值就是可变参数,可以接收多个参数值,也可以不没有.接收的实参必须是位置参数形式

def fun1(name ,age,*args):
    print(name, age,args)
    #print(args)
fun1('小明',18)
fun1('小明',18,'','python讲师','家乡湖南')

该参数接收对于的参数值,全部保存在元组中

5.4.4.2 双星号可变

在参数名前加一个**,该值就是可变参数,可以接收多个参数值,也可以不没有.接收的实参必须是关键字参数形式

def fun2(**kwargs):
    print(kwargs)
fun2(name = '小明',job ='老师',age = 18)
# {'name': '小明', 'job': '老师', 'age': 18}

该参数接收的参数值,是以字典的形式保存,其中参数名就是key,参数值就是value

5.5 返回值

返回值 =return, 就是把值返回给函数本身

格式:

def 函数名(形参):
    代码块
    return 返回值

可以把函数里面的代码理解为过程,返回值表示的是结果

六 Python文件操作

6.1 字符编码

ASCII(American Standard Code for Information Interchange)是一种使用7位二进制编码表示字符的字符集。它最初是为英语和西欧语言设计的,并包括基本的拉丁字母、数字、标点符号等。ASCII编码只能表示128个字符,无法表示其他语言的字符。
GBK(Guo Biao Ku,国标码)是中文编码字符集,是中国国家标准GB 2312的扩展版本。它使用双字节编码,可以表示中国大陆的简体中文字符。GBK编码包含了GB2312的字符,并增加了更多中文字符和符号,总共可以表示21886个字符。
Unicode是一种字符集,它为世界上的各种语言和符号提供了唯一的编码值。Unicode字符集收录了几乎所有已知的字符,包括不同语言的字符、符号、标点符号以及各种技术和专业领域的特殊字符等。每个字符都有唯一的Unicode编码值,可以用整数表示。
UTF-8(Unicode Transformation Format-8)是一种针对Unicode的可变长编码方案。它使用一至四个字节来编码Unicode字符,以便在计算机中存储和传输。UTF-8编码可以表示世界上几乎所有的字符,包括ASCII字符和非拉丁字符。由于UTF-8编码的灵活性和广泛应用,它已成为互联网上最常用的字符编码方式。
utf-8收集世界上大部分国家的语言文字,然后整合一套编码(万国码)

6.2 文件读取

mode常用的三种基础访问模式:

6.3 文件写入

# 第一步:打开文件
with open('python.txt', 'w') as f:
  # 第二步:文件写入
  f.write('hello, 我叫小明')
  # 第三步:内容更新
  f.flush()
  • 直接调用write,内容并未真正写入文件,而是会积攒在程序的内存中,称之为缓冲区
  • 当调用flush的时候,内容会真正写入文件
  • 这样做会频繁的操作硬盘,导致效率下降


七 模块与包

7.1 什么是模块?什么是包?

模块(Module),是一个 Python 文件,以 .py 结尾. 模块能定义函数,类和变量,模块里也能包含可执行的代码

从物理上看,包就是一个文件夹,在该文件夹下自动创建了一个 _ init _.py 文件 ,该文件夹可用于包含多个模块文件 从逻辑上看,包的本质依然是模块

7.2 模块与包的导入方式

常用的组合形式如:

import 模块名/包名
from 模块名/包名 import 类、变量、方法等
from 模块名/包名 import *
import 模块名/包名 as 别名
from 模块名/包名 import 功能名 as 别名

7.3 模块的分类

7.3.1 内置模块
python自带的 不需要下载,直接去使用 #模块需要导入
import random  # 随机模块
import time  # 时间模块
import os  # 系统模块
.....
7.3.2 第三方模块

由其他开发技术人员写的代码,需要下载,才能使用

requests  # 爬虫
pygame  # 游戏开发
pywin32  # Windows编程
...
# 去终端下载模块
pip install 模块名
# pip install requests
# 卸载模块
pip uninstall
# 查看模块 
pip list
# 更新pip
python -m pip install --upgrade pip -i

八 面向对象

8.1 什么是面向对象

面向对象是一种编程范式,它将程序中的数据和操作封装在一个对象中,从而使得程序更加模块化、可重用和易于维护。在面向对象编程中,对象是类的实例化,类是一种抽象的数据类型,它定义了一组属性和方法。


面向对象编程的核心思想是封装、继承和多态。封装是将数据和操作封装在一个对象中,隐藏对象的内部实现细节,只暴露必要的接口给外部访问。继承是通过继承父类的属性和方法,来创建一个新的子类,子类可以重写父类的属性和方法,从而实现更加灵活的功能。多态是指同一个方法可以根据不同对象的实现方式,实现不同的行为。


8.2 类的定义

class 类名:
    类代码(属性,行为)
# 类名的定义:使用大驼峰命名方式(所有单词首写字母大写)
class Dog:
    # 类属性
    name = '狗'    
    # 类方法
    def run(self):
        print('会跑')
# 定义类之后没有实例化对象执行代码,类中的代码也是会执行
# 定义在类中变量称为属性,函数为方法

8.3_ init_ 初始化方法 和 self

  • _ init_ 初始化方法,实例化方法,魔法方法,构造方法,该方法再初始化对象的时候被调用,通常情况用在设计对象的属性,该方法再实例化对象的时候会自己调用执行,不需要手动调用
  • 类中的每个方法在创建的时候基本上都自动定义了一个self参数

self:用来表示对象本身的

class People:
    # 类属性(类属性是所以对象共同的属性)
    age = 18
    name = '人类'
    # 初始化方法
    def __init__(self):
        # 对象属性(实例化属性)
        self.name = '帅哥'
    def run(self):
        print(f'{self.name}在跑步')
# 创建对象
yumo = People()
laoli = People()
print(yumo.name) 
print(laoli.name) 
print(yumo.age) 
"""
帅哥
帅哥
18
"""

8.4 面向对象(封装)

概念:封装是指将数据和行为打包到一个类中,并可以控制外部访问的级别。封装可以保护数据和方法的访问,并且提高代码的可维护性。我们可以利用访问控制修饰符来实现封装,包括公有、私有、受保护和包访问等四种级别。

class Dog:
    '''
        类文档
        这个是类的说明
    '''
    # 类属性
    name = '哈士奇'
    sex = '母'

    def __init__(self,name,age,weight):
        self.name = name
        self.age = age
        self.weight = weight

    def sleep(self):
        print(f'{self.name}在大门口睡大觉')

    def eat(self):
        print(f'{self.name}想吃饭,体重{self.weight},过重不然吃')

erha = Dog('二哈',2,50)
print(erha.name)
print(erha.age)
print(erha.sex)

erha.sleep()
erha.eat()

8.5 面向对象(继承)

概念:继承是指一个类可以从父类中继承方法和属性。如果父类的某个属性或方法也在子类中定义了,那么子类会重写父类的属性或方法,这样子类可以更好地针对自己的特定要求来实现相应的功能。

# 师傅类
class Master(object):
    def __init__(self):
        self.gf = '葵花点穴手'

    def batttle(self):
        print(f'运用了{self.gf}在江湖在无对手')

# 定义一个徒弟
class Prentice(Master):
    pass

ym = Prentice()
print(ym.gf)
ym.batttle()

8.6 面向对象(多态)

概念:多态是指对象可以用多种形态来引用。这样做可以使代码更加灵活,因为同样的操作可以应用于不同的类型。

class OtherBank(Bank):
    # 存款
    def set_money(self,k_money):
        if self.money + k_money >= 5:
            super().set_money(k_money-5)
        else:
            print('穷鬼一个,手续费都不够')

    # 取款
    def get_money(self, k_money):
        if self.money >= k_money+5:
            super().get_money(k_money+5)
        else:
            print('穷鬼')
ym =  OtherBank(123,456,20)
ym.set_money(3)
ym.set_money(3000)
ym.get_money(1)

九 异常

异常:就是在程序执行过程中有逻辑或者其他的错误导致的,是的程序终止运行

异常处理:在程序执行的过程中,发现错误对其进行处理,让程序可以正常执行不为此错误而被迫停止运行

9.1 异常错误

# 常见错误
name error:名称错误-->使用未定义的变量导致的错误
SyntaxError:语法错误-->由于代码存在拼写错误,缺少冒号等导致的错误
TypeError:类型错误-->针对无效的数据类型进行操作导致的错误
indexerror:数组越界错误,访问列表,元组字典不存在的元素导致的错误
file Not Found error:文件不存在错误:打开不存在的文件导致的错误

9.2 异常处理

语法格式:

try:
    代码块(感觉有错误的代码)
exceprt 异常类型:
    判断到上面的代码有异常之后执行的代码
else:
    代码没有异常执行的代码
finally:
    不管代码有没有错误都会执行代码
# 在异常类型加as 变量名 ,可以获取到异常的信息
# Exception: 可以捕获所以的异常

9.3 assert断言

发送AssertionError异常错误

assert 判断表达式,返回异常信息(当判断表达式为False才会执行)
# 表达是bool类型才可以进行使用

9.4 定义异常

raise Exception(返回的异常信息)
有时候,在程序中可以需要自定义异常来报答特定的错误或者整体消息
在python中,可以通过继承Exception类来定义自己的异常类.

以上就是全部内容啦,如有错误以及不足之处,请大佬们及时指出。愿与大家一起共同进步!

相关文章
|
2天前
|
设计模式 测试技术 Python
Python教程:一文了解PageObject模式
PageObject 模式通常用于 Web 应用程序的 UI 自动化测试,尤其是在使用 Selenium、Appium 、Airtest等工具进行测试时非常有效。但是,它并不局限于特定类型的应用或工具,而是一种通用的设计模式,可以用于任何需要进行 UI 自动化测试的场景。
16 5
|
2天前
|
存储 数据安全/隐私保护 计算机视觉
Python教程:一文了解从Bytes到Bits的数据转换
在Python编程中,处理数据时经常需要在字节(bytes)和位(bits)之间进行转换。这种转换在网络通信、数据加密、图像处理等领域尤为常见。本文将详细介绍如何在Python中进行字节与位之间的转换,并提供一个实用的功能:如何在指定的位位置替换位数据。
14 4
|
2天前
|
存储 Python
Python教程:深入理解Python中的命名空间和作用域
在 Python 编程中,理解命名空间(Namespace)和作用域(Scope)是至关重要的。它们决定了变量和函数的可见性和访问性,并直接影响代码的结构和行为。本文将深入探讨 Python 3 中命名空间和作用域的概念、规则以及相关的高级主题。
15 4
|
2天前
|
Python
Python教程:一文了解Python的深拷贝与浅拷贝
理解 Python 中的深拷贝(deep copy)和浅拷贝(shallow copy)是非常重要的,特别是在处理嵌套结构的数据时。让我们深入探讨这两个概念,并通过代码示例进行说明。
15 4
|
2天前
|
算法 Java Python
Python教程:深入了解Python垃圾回收机制
在Python中,垃圾回收(Garbage Collection)是一种自动管理内存的机制,它可以自动识别和清理不再使用的对象,释放它们占用的内存空间,以提高内存利用率和程序性能。
12 3
|
2天前
|
设计模式 Python
Python教程:一文了解Python工厂模式
工厂模式是一种创建型设计模式,它用于创建对象的实例,而无需在客户端代码中指定具体的类。通过引入工厂类,客户端代码只需要与工厂接口进行交互,而不需要了解实际创建的对象的细节。这样可以将对象的创建和使用分离开来,提高了代码的灵活性和可维护性。
14 2
|
2天前
|
存储 JSON JavaScript
Python教程:一文了解Python中的json库
JSON(JavaScript Object Notation)是一种轻量级数据交换格式,易于人类阅读和编写,也易于计算机解析和生成。在Python中,JSON通常用于数据交换和存储,因为它与Python的字典和列表类型相似。
12 2
|
1月前
|
存储 安全 API
【Python 基础教程 21】Python3 文件操作全面指南:从入门到精通的综合教程
【Python 基础教程 21】Python3 文件操作全面指南:从入门到精通的综合教程
99 0
|
1月前
|
机器学习/深度学习 数据采集 C++
【Python 基础教程 07】全面掌握Python3数字操作:入门到精通的实用指南
【Python 基础教程 07】全面掌握Python3数字操作:入门到精通的实用指南
101 2
|
1月前
|
Linux 数据库连接 C++
【Python 基础教程 23】Python3 错误与异常处理全面指南:从入门到精通的实用教程
【Python 基础教程 23】Python3 错误与异常处理全面指南:从入门到精通的实用教程
153 0