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的进阶知识。

热门文章

编程学习 ·

K8S-05-Jenkins部署springCloud项目-gateway

Jenkins部署springCloud项目-gateway代码结构及文件Jenkins配置 代码结构及文件application.yml文件内容server:port: 9527 spring:application:name: cloud-gatewaycloud:nacos:discovery:server-addr: 192.168.0.31:8848gateway:discovery:locator:enabled: trueroutes:- id:…
编程学习 ·

【Linux基础编程】echo命令

01.文章目录 文章目录01.文章目录02.命令概述03.命令格式04.常用选项05.参考示例5.1 输出字符串5.2 输出变量PATH5.3 转义特殊字符5.4 重定向到文件中5.5 输出命令结果5.6 输出换行符5.7 输出退格符5.8 输出字符串不换行5.9 支持通配符5.10 指定输出颜色5.11 设置背景色5.12 文…
编程学习 ·

解决VBE6EXT.OLB不能被加载问题

一般出现这个问题的话,就是配置有问题了,或者是你的VBE6EXT.OLB文件出了问题,看了网上一堆方法,试了很多都不管用,然后综合了一下,总结出了不能用的原因和解决方法:第一种方法: 将自己电脑内的VBA文件转移一下: 路径是由 C:\Program Files (x86)\Common Files\microso…
编程学习 ·

Unity的学习(二):打砖块

一、新建项目创建成功后,进入了如下界面。二、场景的设计 在Hierarchy中鼠标右键创建Plane(地面)游戏物体,将其Transform组件重置,并将游戏物体重命名为Ground,如下图所示。调整地面的大小。在Assets下创建文件夹Materials,并在其中创建Ground的Material(材质)并在Gro…
编程学习 ·

718. 最长重复子数组

给两个整数数组 A 和 B ,返回两个数组中公共的、长度最长的子数组的长度。目录1、题目分析2、解题分析3、代码示例 1:输入: A: [1,2,3,2,1] B: [3,2,1,4,7] 输出: 3 解释: 长度最长的公共子数组是 [3, 2, 1]。1、题目分析求两个数组公共的子数组的长度,那么可以用较短的那个…
编程学习 ·

如何解决eclipse无法显示svn资源库以及给资源库设置起别名

前言每次安排项目时领导都会丢给我一个svn地址,让我去download下来然后功能写完了提交到svn即可。可是项目做多了话,就会出现在很多个svn地址,同时由于url里面的中文会被转码,所有在导入的时候根本不知道哪个时自己要导入的。如下面所示:显示svn资源库以及设置别名 从下图…
编程学习 ·

面试官:小伙子,你给我说一下线程池的线程复用原理吧

前言 前两天和粉丝聊天的时候,粉丝问了我一个挺有意思的问题,说他之前在面试的时候被问到线程池的线程复用原理,当时我跟他简单的说了一下,没想到过了几天又来问我这个问题了,说他最近又被问到了这个问题…想了想,干脆写篇文章把这个东西讲清楚吧,满满的干货都放在下面了…
编程学习 ·

Docker在阿里云上(Centos)下载安装

Docker作用 简单来说就是可以不在考虑项目的运行环境直接转移部署项目,只需要一个镜像文件,甚至可以理解为一个虚拟机(windows的VM软件里安装linux系统)。 卸载旧版本 sudo yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker…
编程学习 ·

[46]api接口文档的生成和与项目文档进行集成

导出api文档 登录Eolinker 平台,生成api文档因为我们不是付费用户,所以无法导出markdown文档,所以导出了html文档 集成到docsify 因为docsify默认时处理markdown的,所以如果我们放上一个html文件就会出现解析错误,所以我们需要对该路径启用不处理window.$docsify = {name:…
编程学习 ·

flutter textfield设置高度后内容无法居中

Container(height: 50,width: MediaQuery.of(context).size.width * 2 / 3,alignment: Alignment.center,child: TextField(autofocus: true,decoration: InputDecoration(//这行代码是关键,设置这个之后,居中contentPadding: EdgeInsets.all(2),hintText: 请输入手机号,pref…
编程学习 ·

快速排序进阶

三月不练手生。翻出了以前写的快速排序、单链表快排和scala快排。老老实实写把基础版写对就足够。 本文代码均经过测试。 1,快速排序的C++写法: #include <iostream> #include <vector> #include <algorithm>using namespace std;int getPartition(int arr…
编程学习 ·

webrtc 实现web端对端视频

https://huangxiaoguo.blog.csdn.net/article/details/104229233https://blog.csdn.net/lbc2100/article/details/44563665https://www.oschina.net/question/156697_172887
编程学习 ·

nginxj简单安装文档

安装依赖包yum -y install pcre-develyum -y install openssl-develyum -y install gccyum -y install lrzszyum -y install openssh-clients安装nginx上传su - root1、cd /usr/local2、rz –y解压tar -xzvf nginx-1.7.7.tar.gz重命名mv nginx-1.7.7 nginx安装nginx进入解压后的…
编程学习 ·

詹姆斯高斯林的传奇人生

詹姆斯高斯林 (James Gosling)是一名软件专家。 高斯林1955年生于加拿大,从小就显露出不同寻常的智慧,12岁便能自己设计电子游戏。 1984年,高斯林进入太阳计算机系统公司,并在这家公司度过了26年时光。 1955年5月19日出生于加拿大,Java编程语言的共同创始人之一,一般公…
编程学习 ·

CentOS Liniux 使用john进行弱口令检测

什么是弱口令? 弱口令(weak password) 没有严格和准确的定义,通常认为容易被别人(他们有可能对你很了解)猜测到或被破解工具破解的口令均为弱口令。弱口令指的是仅包含简单数字和字母的口令,例如“123”、“abc”等,因为这样的口令很容易被别人破解,从而使用户的计算机面…
编程学习 ·

Android项目复盘4

个人主页:https://chengang.plus/ 文章将会同步到个人微信公众号:Android部落格UVC协议文档网址:https://www.usb.org/documents?search=&type%5B0%5D=55&items_per_page=50 主要下载USB Video Class 1_5,关注下载zip包中的UVC 1.5 Class specification.pdf文件,…
编程学习 ·

free_spirit(在栈上爆破一个可以被free的fake_chunk)

free_spirit(在栈上爆破一个可以被free的fake_chunk)首先检查一下程序的保护机制然后,我们用IDA分析一下,功能3存在8字节溢出,将会把v7下面的buf指针覆盖掉,而覆盖了buf指针,就能实现任意地址写。那么,我们劫持函数栈返回地址为one_gadget即可,为了绕过结尾对buf的检查…