Python学习(基础知识2)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 前言
  • 一、python文件基本操作
    • 1.单个文件的读写
    • 2.多个文件的读写
    • 3.文件特定行的读写
  • 二、Python常见的异常类型
    • 1.语法错误
    • 2.运行错误
  • 三、python中函数的编程
    • 1.函数的定义和调用
    • 2.函数的参数传递
    • 3.函数的返回值
    • 4.函数的变量的作用域
    • 5.获取特定作用域的变量
    • 6.Python局部函数及其用法
    • 7.Python lambda表达式(匿名函数)及用法
    • 8.Python种的递归(德罗斯特效应)
    • 9.Python 函数式编程介绍
  • 总结


前言

提示:这里可以添加本文要记录的大概内容:
例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。


提示:以下是本篇文章正文内容,下面案例可供参考

一、python文件基本操作

1.单个文件的读写

在python中,对文件的操作分为两种,一种是系统级操作,作用于文件本身,包括对文件的删除和权限修改;另一种是应用级操作,作用于文件的内容,包括文件的写入和读取。
文件的应用级操作分为三步:
1.打开文件,使用open()函数,返回一个文件对象;
语法格式:
file=open(filename[,mode=‘r/w’[,buffering=-1[,encoding=None]]])

f=open("hello.txt",encoding="utf-8",mode="w+",buffering=-1)

2.对文件进行读或写的操作:读取文件用read(),readline(),readlines()函数;写入文件内容用write()函数;
注意:read()和readlines()函数返回的内容相同,但是格式不同,read()返回的为字符串,readlines()返回的为列表。
语法格式:
file.read() 或者file.read([size])

print(f.read())

处理大文件读取的思路:
利用f.read([size]),防止文件内容过大,内存溢出。
这里用到了with() as ,这个函数可以自动地分配并释放资源,不用在手动调用close()函数。

with open("demo.txt",mode='rb') as f:
    while True:
        block=f.read(1024)
        if not block:
            break

write(stirng)函数可以实现内容复制,用法如下:

f=open("hello.txt",mode="w+")
f.write("hello world\n")
f.write("2021\n")
f.close()

writelines()的用法:

f1=open('demo.txt')
lines=f1.readlines();
f=open("hello.txt",mode="w+")
f.write("hello world\n")
f.write("2021\n")
f.writelines(lines)
f.close()
f1.close()

tell()和seek()的用法:
tell()函数用于判断文件指针当前的位置,seek()函数用于将文件指针移动到文件指定的位置。

f1=open('demo.txt')
print(f1.read(5))
print(f1.tell())

seek(offset,whence=0)

offset:开始的偏移量,也就是代表需要移动偏移的字节数

whence:给offset参数一个定义,表示要从哪个位置开始偏移;0代表从文件开头开始算起,1代表从当前位置开始算起,2代表从文件末尾算起。

3.关闭文件,当完成第2步后,需要关闭文件,用close()函数。

2.多个文件的读写

通过fileinput()模块的input()函数实现同时打开多个文件,并逐个读取文件的内容。比如文件内容的操作,可以实现先对内容进行备份,再执行对内容的操作。
语法格式如下:
fileinput.input((files=“filename1, filename2, …”, inplace=False, backup=’’, bufsize=0, mode=‘r’, openhook=None))
◆files:多个文件的路径列表;
◆inplace:用于指定是否将标准输出的结果写回到文件,此参数默认值为False;
◆backup:用于指定备份文件的扩展名;
◆bufsize:指定缓冲区的大小,默认为0;
◆mode:打开文件的格式,默认为r(只读格式);◆openhook:控制文件的打开方式,例如编码格式等。

for line in fileinput.input(files=('hello.txt','demo.txt'),backup='.bak',inplace=True):
    print(line.replace('good','GOOD'))
fileinput.close()

3.文件特定行的读写

用linecache()模块实现对文章内容特定行内容的读取。

print(linecache.getline('hello.txt',5))

二、Python常见的异常类型

常见的异常类型分为两种:语法错误和运行错误

1.语法错误

代码如下(示例):

print nihao



 File "C:/Users/86186/PycharmProjects/test1/test/myfirst.py", line 217
    print nihao
          ^
SyntaxError: Missing parentheses in call to 'print'. Did you mean print(nihao)?

2.运行错误

代码如下(示例):

a=1/0

Traceback (most recent call last):
  File "C:/Users/86186/PycharmProjects/test1/test/myfirst.py", line 217, in <module>
    a=10/0
ZeroDivisionError: division by zero

运行错误产生的情况成为异常。python中 用try…except…进行异常捕获处理。

try:
   a=10/0
except:
    print("分母不可以为零,请修正")
try:
    f=open('de.txt','r')
    f.write("20210111")
except IOError:
    print("the file is not exits")
else:
    print("duxie chenggong")
    f.close()

还可以用finally来进行资源回收。

     try:
   f=open('de.txt','r')
   f.write("20210111")
except IOError:
   print("the file is not exits")
else:
   print("duxie chenggong")
   f.close()
finally:
   print("over")

三、python中函数的编程

函数是封装好可以重复使用的代码,使程序更加模块化。当调用函数时,只需要调用函数名即可。

1.函数的定义和调用

定义方法:def 函数名(形参):代码块

def loadInt(a):
    print(a)

调用方法:函数名(实参)

b=10
loadInt(b)

2.函数的参数传递

参数分为两种类型:
可变参数:类似指针传递,如列表和字典。如fun(a),是将a真正地传过去,修改后fun外部的a也会受影响。

def changeList(mylist):
    mylist.append([1,2,3,4])
    print('函数内部的值:',mylist)

newlist=[5,6,7,8]
changeList(newlist)
print('函数外面的值:',newlist)



函数内部的值: [5, 6, 7, 8, [1, 2, 3, 4]]
函数外面的值: [5, 6, 7, 8, [1, 2, 3, 4]]

不可变参数:类似值传递。整数,字符串,元组。如fun(a),传递的是a的值,不影响a本身。


def loadInt(a):
    a=10
    print('函数内部的值为:',a)

b=2
loadInt(b)
print('函数外部的值为:',b)






函数内部的值为: 10
函数外部的值为: 2

调用函数时常用的参数类型如下:
1.位置参数
函数调用时,实参默认按位置参数进行传递,并且和形参个数一致。

def fun_a(a,b,c):
    print('a={0},b={1},c={2}'.format(a,b,c))
    
fun_a(19,20,30)


a=19,b=20,c=30

2.默认参数
注意:默认参数放在最后的位置。

def fun_a(a,b,c=10):
    print('a={0},b={1},c={2}'.format(a,b,c))
    
fun_a(19,20)


a=19,b=20,c=10

3.命名参数
给参数命名,这时候可以交换参数的位置

def fun_a(a,b,c):
    print('a={0},b={1},c={2}'.format(a,b,c))
    
fun_a(a=19,c=10,b=20)


a=19,b=20,c=10

4.可变参数
定义参数的时候,不确定参数的个数。

def fun_a(a,*b):
    print('a={0},b={1}'.format(a,b))
    
fun_a(192010)


a=19,b=(20, 30)

关键字定长参数
用**x来做为形参定义参数

def fun_a(a,**b):
    print('a={0},b={1}'.format(a,b))
    
fun_a(19,age=20,name="zhangsan")


a=19,b={'age': 20, 'name': 'zhangsan'}

注意:*x和**x的区别:
*x代表的为元组,**x代表的为字典

3.函数的返回值

用def定义函数,用return来返回函数的返回值,返回值可以为任意类型。
语法:return【返回值】
返回值也可以为none。

def sum(a,b):
    c=a+b
    return c
m=sum(2,3)
print(m)

5

return可以在函数中出现多次,但是,只要有一个执行,就会退出函数。

def ispositivenum(a):
    if a>0:
        return True
    else:
        return False
        
print(ispositivenum(5))


True

4.函数的变量的作用域

变量分为局部变量和全局变量
局部变量只在定义的函数里有效。

def sum():
    c=20
    return c

sum()
print(c)

T    print(c)
NameError: name 'c' is not defined

全局变量指变量在整个作用域有效。定义全局变量的方法有两种,一种是在函数体外部定义。

c=30
def sum():
    print(c)
    return c

sum()
print(c)



30
30

在函数体内部定义,用关键字global修饰。

def sum():
    global c
    c=20
    return c

sum()
print(c)

5.获取特定作用域的变量

有时我们需要获取特定作用域中所有的变量。这里介绍3种。
1.globals()用于获取全局变量。

test_name='hello world,2021'
def test():
    name='你好,2021'
    print(locals())

test()

for key,value in dict(globals()).items():
    print(key,value)

注意如果此时globals()换为locals(),效果一样。可见locals()要用在定义的函数内部。
2.locals()用于获取局部变量。

test_name='hello world,2021'
def test():
    name='你好,2021'
    print(locals())

test()

3.vars()其功能是返回一个指定object 对象范围内所有变量组成的字典。如果不传入object参数,vars() 和locals() 的作用完全相同。

test='hello'
class test1:
    name='zhangsan'
print(vars(test1))


{'__module__': '__main__', 'name': 'zhangsan', '__dict__': <attribute '__dict__' of 'test1' objects>, '__weakref__': <attribute '__weakref__' of 'test1' objects>, '__doc__': None}


6.Python局部函数及其用法

在函数体内部定义函数,被称为局部函数。
调用局部函数的方法:
1.在函数内部调用局部函数,调用外部调用函数。

def outdef():
    def indef():
        print("www.hao123.com")
    indef()

outdef()

2.将局部函数作为外部函数的返回值

def outdef():
    def indef():
        print("www.hao123.com")
    return indef()

outdef()


当局部函数的变量名和外部函数的变量名相同的时候,用nonlocal关键字修饰。

    def indef():
        nonlocal name
        name='lisi'
        print(name)
    indef()

outdef()

7.Python lambda表达式(匿名函数)及用法

lambda用来表示匿名函数,函数不再需要用def进行定义。
对于简单的函数。省去了定义函数的繁琐步骤,常用于:所用函数只用一次,并且逻辑简单。又被称为单行函数。
语法:变量名= lambda参数:表达式
◆参数:可选,通常以逗号分隔的变量表达式形式,也就是位置参数
◆表达式:不能包含循环、return,可以包含if…else…
下面的函数。


def fun():
    return 1==2
print(fun())

用lambda表示为:

a=lambda:1==2
print(a())

当有参数时:

a=lambda x,y,z:x+y+z
print(a(1,2,3))

8.Python种的递归(德罗斯特效应)

在Python中,一个函数可以调用其他函数。函数甚至也可以调用自身,这类函数称为递归函数(RecursiveFunction)。
如果一个函数直接或者间接地调用函数本身,那么就是递归函数。这意味着,函数将不断的调用本身并重复函数的内容,直到达到某个条件才返回一个结果。
所有的递归函数都有着同样的结构,这个结构由两部分组成:基础部分,递归部分。

def fun_a(n):
    if n==1:
        return n
    n=n*fun_a(n-1)
    return n
print(fun_a(10))

9.Python 函数式编程介绍

函数式编程的特点是:允许函数本身作为一个参数传入另外一个函数,还允许返回另外一个函数。
常用的如下:
map()函数
语法格式:map(function, iterable)
其中,function参数表示要传入一个函数,可以是内置函数、自定义函数或者lambda 匿名函数;
iterable表示一个或多个可迭代对象,可以是列表、字符串等。map() 函数的功能是对可迭代对象中的每个元素,都调用指定的函数,并返回一个map 对象,不是list。

def fun_a(x):
    return x**3
lsit1=range(1,10)
newlist=map(fun_a,lsit1)
print(list(newlist))
list1=['hello','world']
newlis=map(lambda x: x.upper(),list1)
print(list(newlis))

filter()函数
语法格式:filter(function, iterable)
funcition参数表示要传入一个函数,iterable表示一个可迭代对象。
filter() 函数的功能是对iterable中的每个元素,都使用function 函数判断,并返回True 或者False,最后将返回True 的元素组成一个新的可遍历的集合。

def fun_a(n):
    return n%2==1
list1=[1,2,3,4,5,6,7,8,9]
newlist=filter(fun_a,list1)
print(list(newlist))

[1,3,5,7,9]

reduce() 函数
通常用来对一个集合做一些累积操作.
语法格式为:reduce(function, iterable)
其中,function规定必须是一个包含2 个参数的函数;
iterable表示可迭代对象。
注意:由于reduce() 函数在Python 3.x 中已经被移除,放入了functools模块,因此在使用该函数之前,需先导入functools模块,需要引用:fromfunctoolsimport reduce

from functools import reduce

lista=[1,2,3,4,5]
m=reduce(lambda x,y:x*y, lista)
print(m)


120

总结

Python基础知识差不多整理完成,后面将整理学习,Python的进阶知识。

热门文章

编程学习 ·

JVM(一)--JVM的内存区域划分以及相关知识点

JVM(一)–JVM的内存区域划分以及相关知识点 一、JVM的内存区域是怎么划分的? JVM结构图JVM = 类加载器 + 执行引擎 + 运行时数据区类加载器(Class Loader):把硬盘上的class文件加载到JVM中的运行时数据区域,它不负责这个类文件是否能够执行 执行引擎(Execution Engine):…
编程学习 ·

一篇文章带你搞懂 SpringBoot 的配置文件

文章目录一、SpringBoot 配置文件类型1. SpringBoot配置文件类型和作用2. application.yml配置文件3. SpringBoot配置信息的查询二、配置文件与配置类的属性映射方式1. 使用注解@Value映射2. 使用注解@ConfigurationProperties映射 一、SpringBoot 配置文件类型 1. SpringBoot配…
编程学习 ·

JVM - G1&ZGC初探

文章目录GC概述参考GC概述 我们知道Serial 、Serial Old 、 Parallel 、 Parallel Old 、 ParNew 、CMS这些垃圾收集器都是基于分代收集理论,即将内存区域按照存储对象的不同分为年轻带、老年代和元空间。如下G1 和 ZGC 逐渐淡化了这种分代的概念,G1的堆内存分配如下堆被划分…
编程学习 ·

什么是嵌入式培养?要不要选嵌入式培养?

前言 马上要高考了,高考完后势必要面临选专业,本人作为大二的计算机专业老油条,要为想选计算机专业的小萌新们科普科普,什么是嵌入式培养。嵌入式培养的概述 这里的嵌入式,说白了,就是要把社会上的东西,嵌入到学校的教学里 这个概念本来是没有的,但是上级领导认为,计算…
编程学习 ·

离线安装pyinstaller时,报错的解决过程

报错内容: Command ““c:\program files\python37\python.exe” “c:\program files\python37\lib\site-packages\pip” install --ignore-installed --no-user --prefix C:\Users\yf\AppData\Local\Temp\pip-build-env-l034cdvw\overlay --no-warn-script-location --no-bina…
编程学习 ·

2020上半年为你留下了什么?

今天是2020年6月30号,2020年上半年的最后一天.蓦然回首,发现时光过得飞快,记忆中那憋在家里,数着日子,焦虑不安的情景还历历在目.那时候最大的愿望就是像电视中那样:一觉醒来,半年过去了,大家又都按部就班没羞没躁的生活着.好多文人墨客都会鼓吹:每种经历都是人生的财富,人生没…
编程学习 ·

电信云堤·抗D(电信云堤清洗高防服务器)提供超强T级DDoS处理能力

电信云堤”下辖四大产品: 电信云堤DDoS攻击防护(简称“电信云堤抗D”) 电信云堤域名安全防护(简称“电信云堤域名无忧”) 电信云堤反钓鱼网站处置(简称:“电信云堤反钓鱼”) 电信云堤网站安全专家(简称:“电信云堤网站安全专家)电信云堤抗D “电信云堤抗D”依托于中…
编程学习 ·

Taro 3 正式版发布:开放式跨端跨框架解决方案

作者:凹凸曼 - yuche 从 Taro 第一个版本发布到现在,Taro 已经接受了来自于开源社区两年多的考验。今天我们很高兴地在党的生日发布 Taro 3(Taro Next)正式版,希望 Taro 未来的更多两年能像一名共产主义战士一样经受住更多的考验。以下是 Taro 3 的一些新增特性: 跨框架:…
编程学习 ·

安装Ubuntu系统时遇见的问题:

安装双系统,在已有win10的基础上安装Ubuntu18.04相关设备:1)Rufus 3.112) Ubuntu18.04.4的镜像文件通过使用rufus来制作U盘启动器,因为网上有详细教程就不介绍了。由于之前有多次安装Ubuntu的经历,磁盘分区比较乱,以及因为在之后的选择安装里如果卸载之前安装的Ubuntu就不…
编程学习 ·

网络硬盘录像机NVR的接入、解码、转发能力解析

网络硬盘录像机NVR的接入、解码、转发能力解析 你是否有过这样的疑问, 这台录像机,可以接什么摄像机呢? 能不能全部都接300万甚至400万的高清摄像机? 能不能接500万的摄像机? 录像机经常显示资源不足? 录像机画面卡顿? 作为从业的你是否知道NVR有三种能力呢? 接入能力,…
编程学习 ·

Fiddler(二)数据信息分析

抓包是Fiddler的最基本的应用,以本博客为例,启动Fiddler之后,在浏览器中输入http://blog.csdn.net/ohmygirl 键入回车之后,在Fiddler的web session界面捕获到的HTTP请求如下图所示:#号列中的图标,每种图标代表不同的相应类型,具体的类型包括:另外,注意请求的host字段。…
编程学习 ·

训练数据转换为PASCAL VOC2007

数据 我们已有标注数据个数为json保存的,现在训练代码使用的标注格式为PASCAL VOC2007,为了不修改代码,将数据转换到PASCAL VOC2007的xml格式。 转换代码 import os import json from lxml.etree import Element, SubElement, tostring, ElementTree from xml.dom import mi…
编程学习 ·

启动Altium Designer20时界面卡几分钟的处理办法

开始启动Altium Designer20时界面卡在Explorer Starting EDMS Interface时处理办法首先解释下,AD20卡在这里是因为在连接AD的服务器,而使用破解版的话就有可能会卡在这个界面(也有人用破解版不会卡在这里)因为这是软件在启动时连接服务器导致的,所以咱们只需要把他连接网络…
编程学习 ·

Obliv-C使用详解

前期说明 Obliv-C是一款GCC包装器,其作者在C语言的基础上对其进行了一定的类C处理,添加了一些规则限制,用于模拟实现混淆电路 Obliv-C不需要手动混淆,只需要调用其中的函数便可实现混淆电路,其不涉及真实硬件电路仿真,即无法导出函数对应的基本元电路(也可能是博主没有成…
编程学习 ·

数据库---常用数据库的驱动程序

Oracle数据库 驱动程序包名:ojdbc6.jar 驱动类的名字:oracle.jdbc.driver.OracleDriverJDBC URL:jdbc:oracle:thin: @dpip:port: databasename 说明:驱动程序包名有可能会变 JDBC URL中各个部分含义如下: dbip –为数据库服务器的IP地址,如果是本地可写:localhost或127.…
编程学习 ·

堪称零瑕疵!仅用了330页直接封神,我要吹爆这份RocketMQ笔记

RocketMQ天生为金融互联网领域而生,追求高可靠、高可用、高并发、低延迟 RocketMQ在阿里集团也被广泛应用在订单,交易,充值,流计算,消息推送,日志流式处理,binglog分发等场景 其主要功能有:灵活可扩展性、 海量消息堆积能力、 能够保证严格的消息顺序 提供丰富的消息拉…
编程学习 ·

mongoDB采坑

mongoDB采坑 安装问题没有权限参考 https://blog.csdn.net/qq_20084101/article/details/82261195