python学习--基础语法及函数

Python发展历史: https://baike.baidu.com/item/Python/407313?fr=aladdin

 

 

变量

程序中,数据都是临时存储在内存中,为了更快速的查找或使用这个数据,通常我们把这个数据在内存中存储之后定义一个名称,这个名称就是变量。

二、定义变量

2.1标识符

2.2命名习惯

见名知义。
大驼峰:即每个单词首字母都大写,例如︰MyName 。
小驼峰:第二个(含)以后的单词首字母大写,例如:myName 。

下划线︰例如:my_name

Python 标识符

在 Python 里,标识符由字母、数字、下划线组成。

在 Python 中,所有标识符可以包括英文、数字以及下划线(_),但不能以数字开头。

Python 中的标识符是区分大小写的。

以下划线开头的标识符是有特殊意义的。以单下划线开头 _foo 的代表不能直接访问的类属性,需通过类提供的接口进行访问,不能用 from xxx import * 而导入。

以双下划线开头的 __foo 代表类的私有成员,以双下划线开头和结尾的 __foo__ 代表 Python 里特殊方法专用的标识,如 __init__() 代表类的构造函数。


Python 保留字符

下面的列表显示了在Python中的保留字。这些保留字不能用作常数或变数,或任何其他标识符名称。

所有 Python 的关键字只包含小写字母。

andexecnot
assertfinallyor
breakforpass
classfromprint
continueglobalraise
defifreturn
delimporttry
elifinwhile
elseiswith
exceptlambdayield

行和缩进

学习 Python 与其他语言最大的区别就是,Python 的代码块不使用大括号 {} 来控制类,函数以及其他逻辑判断。python 最具特色的就是用缩进来写模块。

if True:
    print ("True")
else:
    print ("False")

缩进的空白数量是可变的,但是所有代码块语句必须包含相同的缩进空白数量,这个必须严格执行。(建议你在每个缩进层次使用 单个制表符两个空格四个空格 , 切记不能混用)

Python注释

python中单行注释采用 # 开头。

python 中多行注释使用三个单引号(''')或三个双引号(""")。

eval是Python的一个内置函数,这个函数的作用是,返回传入字符串的表达式的结果。

三、数据类型

格式化输出

f-格式化字符串是Python3.6中新增的格式化方法,该方法更简单易读。

 

#将输入的转化为整数
n=int(input('请输入一个整数\n'))
print(type(n))

#连续输入两个整数
m,n=map(int,input('请输入两个整数\n').split())
print(f'm:{m}\n,n:{n}')

#连续输入5个整数
nums=list(map(int,input('连续输入5个整数').split()))
for i in range(5):
    print(nums[i])

eval转换成原本的类型

运算符的分类

算数运算符

赋值运算符

 

复合赋值运算符 

 

比较运算符

逻辑运算符

字符串常用操作方法

字符串的常用操作方法有查找、修改和判断三大类。

查找

Python index() 方法检测字符串中是否包含子字符串 str ,如果指定 beg(开始) 和 end(结束) 范围,则检查是否包含在指定范围内,该方法与 python find()方法一样,只不过如果str不在 string中会报一个异常。

语法

index()方法语法:

str.index(str, beg=0, end=len(string))

修改

split分割字符串

合并字符串join

删除空白字符

列表可以一次性存储多个数据,且可以为不同数据类型。

 列表由一系列按特定顺序排列的元素组成。可以是不同的数据类型,元素之间可以没有关系。用[]方括号来表示,并用逗号分隔其中的元素。

用[]索引,索引从0开始,python提供了-1索引,返回最后一个列表元素,-2倒数第二个。负数索引返回离列表末尾相应距离的元素。【仅当列表为空时,这种访问最后一个元素的方式才会导致错误。】

方法:

append insert del pop栈顶元素 pop(任意位置) remove(值)【方法remove()只删除第一个指定的值。如果要删除的值可能在列表中出现多次,就需要使用循环来判断是否删除了所有这样的值

】使用方法sort()对列表进行永久性排序wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==降序

使用函数sorted()对列表进行临时排序,

倒着打印列表,方法reverse())永久性地修改列表元素的排列顺序,

使用函数len ()可快速获悉列表的长度。

处理列表的部分元素——Python称之为切片

[0:3]--0 1 2

[:4]0 1 2 3从头开始

[2:]2 3...到最后(下标是2,是第3个元素)

[:3]前3个

[-3 : ]后3个

[:]整个列表

复制:

list1=list2只是复制了一个变量引用,这两个变量指向同一个列表,一个改变另一个也改变

list1=list2[:]复制了一个副本,指向不同的内存,一个改变另一个不变

列表查找

列表增加

1.append合并增加

#列表
#1.1增加
name_list=['Tom','Lily','ROSE']
# name_list.append('xiaoming')
# print(name_list)
#['Tom', 'Lily', 'ROSE', 'xiaoming']直接写入到结尾 说明列表是一个可变类型
 name_list.append(['xiao','zhan'])
 print(name_list)
#['Tom', 'Lily', 'ROSE', ['xiao', 'zhan']]
#注意点       如果append()追加的数据是一个序列,则追加整个序列到列表

2.extend 拆分增加

#1.2 extend拆分增加
name_list=['Tom','Lily','ROSE']
#name_list.extend('yangyang')
print(name_list)
#['Tom', 'Lily', 'ROSE', 'y', 'a', 'n', 'g', 'y', 'a', 'n', 'g']
name_list.extend(['gongjun','zhehan'])
print(name_list)
#['Tom', 'Lily', 'ROSE', 'gongjun', 'zhehan']
#extend():列表结尾追加数据,如果数据是一个序列,则将这个序列的数据逐―添加到列表

3.insert指定位置新增

#1.3 insert指定任意位置插入
name_list=['Tom','Lily','ROSE']
#               位置下标 数据
name_list.insert(1,'test')
print(name_list)
#['Tom', 'test', 'Lily', 'ROSE']

列表删除

1.1 del删除整个列表或者根据下标进行删除

#1.1.2  del删除指定下标的数据
name_list=['Tom','Lily','ROSE']
del name_list[0]
print(name_list)
#['Lily', 'ROSE']

1.2pop根据下标删除,并返回被删除的值

#2.1 pop 删除指定下标数据,并返回被删除的数据 默认删除最后一个数据
name_list=['Tom','Lily','ROSE']
#pop_n=name_list.pop()
#print(pop_n)#ROSE
print(name_list)#['Tom', 'Lily']
pop_n=name_list.pop(0)
print(name_list)#['Lily', 'ROSE']

1.3remove根据数据值进行删除

#1.3remove根据数据值删除
name_list=['Tom','Lily','ROSE']
name_list.remove('Lily')
print(name_list)#['Tom', 'ROSE']

1.4 clear清空列表 变成空列表

#clear清空列表
name_list=['Tom','Lily','ROSE']
name_list.clear()
print(name_list)#[]

列表修改

1.1修改制定下标的数据

#修改
#1.1修改制定下标的数据
name_list=['Tom','Lily','ROSE']
name_list[1]='hhhh'
print(name_list)#['Tom', 'hhhh', 'ROSE']

1.2逆置数据 

#逆序
name_list.reverse()
print(name_list)
#['Tom', 'hhhh', 'ROSE']
#['ROSE', 'hhhh', 'Tom']
list1=[1,2,3,4,5,6]
list1.reverse()
print(list1)
#[6, 5, 4, 3, 2, 1]

1.3排序

#3.sort()排序  默认升序
list2=[1,2,3,4,5]
list1.sort()
print(list2)
#[1, 2, 3, 4, 5]默认升序
list2.sort(reverse=True)
print(list2)
#[5, 4, 3, 2, 1]降序

列表的复制

.copy() 数据来源不易,为了不破坏原始的数据,做一个数据的副本,再做删除操作

#4列表的复制cooy
lis3=list2.copy()
print(list2)
#[5, 4, 3, 2, 1]
print(lis3)
#[5, 4, 3, 2, 1]

列表的循环遍历

依次打印列表中的数据 while循环

name_list= ['Tom','Lily','ROSE']
i=0
while i<len(name_list):
    print(name_list[i])
    i+=1
# Tom
# Lily
# ROSE

for循环

#for循环
for i in name_list:
    print(i)
#Tom
# Lily
# ROSE

 

元组的常见操作

元组的定义

列表非常适合用于存储在程序运行期间可能变化的数据集。列表是可以修改的,这对处理网站的用户列表或游戏中的角色列表至关重要。然而,有时候你需要创建一系列不可修改的元素,元组可以满足这种需求。Python将不能修改的值称为不可变的,而不可变的列表被称为元组。元组是只读列表。

元组看起来犹如列表,但使用圆括号而不是方括号来标识。定义元组后,就可以使用索引来访问其元素,就像访问列表元素一样。

字典

字典、列表是可变类型,字符串、元组不可

dict3={'name':'Tom','age':10,'gender':'男'}
#修改
dict3['name']='rose'
#增添
dict3['rose']='star'
#删除单个属性
del dict3['age']
#删除整个
del dict3
#查找
dict1={'rrr':"ddd",'www':9}
dict1['rrr']
dict1.get('www',0)
#清空字典--变成空字典
dict3.clear()
print(dict3)

 

字典的循环遍历

dict3={'name':'Tom','age':10,'gender':'男'}
#遍历字典
print('key:')
for key in dict3.keys():
    print(key)
'''key:
name
age
gender'''

print('value:')
for value in dict3.values():
    print(value)
'''value:
Tom
10
男'''

print('item:')
#键值对的拆包
#xx.items()返回可迭代对象,内部是元组,元组有两个数据 数据1 是字典的key,数据2是字典的value
for key,value in dict3.items():
    print(f'{key}={value}')
'''item:
name=Tom
age=10
gender=男'''

创建集合

创建集合使用({}或set(),但是如果要创建空集合只能使用set(),因为用来创建空字典。

集合常见操作方法

增加数据

因为集合有去重功能,所以,当向集合内追加的数据是当前集合已有数据的话则不进行任何操作。

s1={10,20}
#1.集合是可变类型的

#add增加单一数据到集合中
s1.add(100)
print(s1)
#{100, 10, 20}集合是无序的,add可能会增加到任何一个位置
s1.add(100)#集合有去重功能,如果追加已有数据,则什么操作都不做

#update增加一个数据序列到原集合中
s2={1,2}
s2.update([10,20,30,30])
print(s2)
#{1, 2, 10, 20, 30}

删除数据

#删除集合中的数据
s1={10,202,30,40,50}

#remove():删除指定数据:如果数据不存在报错
s1.remove(10)
print(s1)
s1.remove(10)#KeyError: 10

#discard()删除指定数据,如果数据不存在不报错
s1.discard(202)
print(s1)
s1.discard(202)

#pop()随机删除集合中的数据,并返回这个数据
del_num=s1.pop()
print(del_num)#40
print(s1)

查找数据

in:判断数据在集合序列
not in:判断数据不在集合序列

推导式(为了化简代码)

列表推导式

字典推导式

集合推导式
一.列表推导式
作用:用一个表达式创建一个有规律的列表或控制一个有规律列表。列表推导式又叫列表生成式。

#列表推导式-----创建或控制有规律的列表

#需求︰创建一个0-10的列表

#1.1创建空列表
#1.2循环有规律的数据写入到列表中
list1=[]
i=0
while i<10:
    list1.append(i)
    i+=1
print(list1)


#for循环的实现
list2=[]
for i in range(10):
    list2.append(i)
print(list2)

#列表推导式实现
list3=[i for i in range(10)]
#      *  for循环的左边 也就是i是我们返回的值
print(list3)#[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
#带if的列表推导式
#创建0-10的偶数列表
list4=[i for i in range(0,10,2)]
print(list4)#[0, 2, 4, 6, 8]
list5=[i for i in range(10) if i%2==0]
print(list5)#[0, 2, 4, 6, 8]
names=['jdd','ll','ppp','dd','oo']
names_3=[i for i in names if len(i)>2]
print(names_3)#['jdd', 'ppp']

#多个for循环实现列表推导式
#需求:创建列表如下:
#[(1,0),(1,1),(1,2),(2,0),(2,1),(2,2)]
list6=[(i,j) for i in range(1,3) for j in range(3)]
print(list6)
#[(1, 0), (1, 1), (1, 2), (2, 0), (2, 1), (2, 2)]

#字典推导式
#作用:快速合并列表 或 提取字典中目标数据

#创建字典 key是1-5的数字,value是这个数字的平方
dict1={i:i**2 for i in range(1,5)}
print(dict1)#{1: 1, 2: 4, 3: 9, 4: 16}

#将两个列表合并为一个字典
lis1=['name','age','gender']
lis2=['Tom',18,'male']
dict2={lis1[i]:lis2[i] for i in range(len(lis1))}
print(dict2)#{'name': 'Tom', 'age': 18, 'gender': 'male'}

#提取字典中目标数据
#提取电脑数量大于200的字典数据
counts = { 'MBP': 268,'HP': 125,'DELL': 201,'Lenovo': 199, 'acer ': 99}
count1={key:value for key,value in counts.items() if value>=200}
print(count1)#{'MBP': 268, 'DELL': 201}

#集合推导式
#需求:创建一个集合,数据为下方列表的2次方。
lis3=[1,1,2]
set1={i**2 for i in lis3}
print(set1)#{1, 4}集合有数据去重功能

函数的使用步骤

2.1定义函数

2.2调用函数

拆包

https://blog.csdn.net/wzyaiwl/article/details/83079700拆包

https://www.cnblogs.com/bingabcd/p/6671368.html位置参数、关键字参数

#拆包
#对元组进行拆包
def nums():
    return 100,200
j_nmus=nums()
print(j_nmus)
#(100, 200)

a,b=nums()
print(a,b)
#100 200

#对字典进行拆包
dict3={'name':"Tom",'age':19}
a,b=dict3
#取出的是key
print(a)
#name

print(b)
#age
#取出的是value
print(dict3[a])
#Tom

print(dict3[b])
#19

递归

#递归
def digui(num):
    if num==1:
        return 1
    return num+digui(num-1)

sum=digui(4)
print(sum)#10

三、lambda表达式/匿名函数

3.1 l ambda的应用场景
如果一个函数有一个返回值,并且只有一句代码,可以使用lambda简化。(简化了代码量,节省了内存的开销)

3.2 lambda语法

lambda 参数列表︰表达式

注意
lambda表达式的参数可有可无,函数的参数在lambda表达式中完全适用。

lambda表达式能接收任何数量的参数但只能返回一个表达式的值

#lambda表达式或者匿名函数
#1.只有一行代码且只有一个返回值的函数

def f1(n):
    return n**2
print(f1(3))#9

#lambda 表达式
#lambda 参数列表:表达式

#返回平方
f=lambda n:n**2
print(f)#0x00000239281BE9D0返回内存地址
#如果想要得到返回值,需要调用函数
print(f(3))#9

#计算和
f2=lambda a,b:a+b
print(f2(3,4))#7

#无参数
f3=lambda :100
print(f3())#100

#一个参数
f4=lambda a:a
print(f4('hello'))

#默认参数(缺省参数)
f5=lambda a,b,c=100:a+b+c
#c没有传递参数,就默认是100
print(f5(10,20))#130
#c传递参数参数30,就不用默认,用30
print(f5(10,20,30))#60

#可变参数(处理不定长参数)---*args返回元组---未命名 位置参数
f6=lambda *args:args
print(f6(10,20,30))#(10, 20, 30)
#注意这里的可变参数传入到lambda之后,返回值为元组

#可变参数--**kwargs返回的是字典----命名的 关键字参数
f7=lambda **kwargs:kwargs
print(f7(name='Tom'))#{'name': 'Tom'}
print(f7(name='Tom',age=16,sex='female'))
#{'name': 'Tom', 'age': 16, 'sex': 'female'}

#lambda的应用
#1 带判断的lambda  返回两个值中较大的数
fn1=lambda a,b:a if a>b else b
print(fn1(100,500))#500\

#2 列表数据按字典key的值排序
students=[
    {'name':'Tom','age':20},
    {'name':'ROSE','age':19},
    {'name':'Jack','age':22}
]
#按name值升序排列
students.sort(key=lambda x:x['name'])
print(students)
#[{'name': 'Jack', 'age': 22}, {'name': 'ROSE', 'age': 19}, {'name': 'Tom', 'age': 20}]

#按name值降序排列
students.sort(key=lambda x:x['name'],reverse=True)
print(students)
#[{'name': 'Tom', 'age': 20}, {'name': 'ROSE', 'age': 19}, {'name': 'Jack', 'age': 22}]

四、高阶函数--化简代码,增加函数的灵活性--将函数作为参数传入

把函数作为参数传入,这样的函数称为高阶函数,高阶函数是函数式编程的体现。函数式编程就是指这种高度抽象的编程范式。

函数式编程大量使用函数,减少了代码的重复,因此程序比较短,开发速度较快。

#高阶函数---把函数作为参数传递

#对两个整数求平均值再求和

#方法一
def add_sum(a,b):
    return abs(a)+abs(b)

res=add_sum(-1,2)
print(res)

#方法二
def sum(a,b,f):
    return f(a)+f(b)
res=sum(-1,2,abs)
print(res)

#注意:两种方法对比之后,发现,方法2的代码会更加简洁,函数灵活性更高。

4.1常见的内置高阶函数

#常见内置高阶函数 ---map
list1=[1,2,3,4]
#准备函数
def func(x):
    return x**2
#调用map   把func函数作用到list1中
res=map(func,list1)
print(list(res))#转化成list
#[1, 4, 9, 16]

#reduce---每次累加和
#1.reduce(fn,iter)

   # 功能: 用fn对iter里面的第一个和第二个元素进行运算,将得到的结果和第三个元素用 fn函数运算,最后得到一个结果。
   #
   #             直到序列中的元素全部参与运算
from functools import reduce
list1=[1,2,3,4,5]
def func(a,b):
    return a+b
#调用reduce
res=reduce(func,list1)
print(res)#15

# 方式二
result2 = reduce(lambda x, y: x + y, list1)
print(result2)#15

# 将数字列表中的所有元素合成一个数字        [1,2,3,4,5]---------> 12345
def func(a,b):
    return a*10+b
res=reduce(func,list1)
print(res)#12345

# 方式二
result4 = reduce(lambda x, y: x*10+ y, list1)
print(result4)#12345

#3.内置函数  filter()
#filter(func, Ist)函数用于过滤序列,过滤掉不符合条件的元素,返回一个filter对象。如果要转换为列表,可以使用list()来转换。
list2=[1,2,3,4,5,6,7,8,9,10]
def func(x):
    return x%2==0
#将func函数作用到list2中,把满足条件的过滤出来
res=filter(func,list2)
print(list(res))#[2, 4, 6, 8, 10]

str与int互换

a='124'
b=int(a)
print(a)
print(type(a))
print(b)
print(type(b))
# 124
# <class 'str'>
# 124
# <class 'int'>

文件操作

总结︰文件操作的作用就是把一些内容(数据)存储存放起来,可以让程序下一次执行的时候直接使用,而不必重新制作一份,省时省力。

+可读可写   b二进制 w+与b+的区别就是特性遵循前面的主模式w或r。a的指针在结尾,w和r在开头

#1.打开文件
#打开的文件名字  打开模式:只读r,写入w,追加a
# w如果文件不存在,先创建,如果存在,w先清空再写入,a直接末尾追加,r文件不存在就报错,只读模式下不可写入
f=open('G:\PyCharmSpace\love.txt','r+')#r+读写
#2.写
#对象.write('内容')
f.write('shsfsg')#会覆盖原来的内容


#读
#1文件对象.read(num)
# num表示要从文件中读取的数据的长度(单位是字节),如果没有传入num
# 那么就表示读取文件中所有的数据。
#文件内容如果换行,底层有\n,会有字节占位,导致read书写参数读取出来的眼睛看到的个数和参数值不匹配
#print(f.read())#shsfsg
#print(f.read(6))

# readlines()
# readlines可以按照行的方式把整个文件中的内容进行一次性读取,并且返回的是一个列表,其中每一行的数据为一个元素。
#content=f.readlines()
#print(content)#\n也会被读取
#['我爱你\n', 'i love you\n', '我爱你\n', 'i love you\n', '我爱你\n', 'i love youshsfsgshsfsgshsfsgshsfsg']

#readline()—次读取一行内容。
c1=f.readline()#读取第一行
print(c1)
c2=f.readline()#继续读取第二行
print(c2)


#3.关闭文件
f.close()

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值