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类来定义自己的异常类.
以上就是全部内容啦,如有错误以及不足之处,请大佬们及时指出。愿与大家一起共同进步!