_22-py

命名规范

        py命名全小写,以下划线 _ 分隔

缩进

        py有一套缩进规则,不按规则编写不能通过编译。

        1、首行顶格无缩进

        2、相同逻辑层保持相同缩进量

        3、: 冒号标记一个新的逻辑层

        4、PEP8指导使用4个空格作为缩进,规模大的实际开发可能为2个

条件表达式

        py使用 y if con else x 表示条件表达式。意思是当con为true时,表达式的值为y,否则为x。相当于c++和java中的三元表达式 con?y:x;

列表推导式

        语法格式为:

[表达式 for 迭代变量 in 可迭代对象 [if 条件表达式]]

        示例

#for循环
old_list = [1,2,3]
new_list = []
for i in old_list:
    new_list.append(i*2)

print(new_list)

#列表推导式
new_list = [i*2 for i in old_list]

print(new_list)

#还可以在其中加if判断
new_list = [i*2 for i in old_list if i>1]

#还还可以使用两层for循环
new_list = [(x,y) for x in range(3) for y in range(3)]
print(new_list)
#输出:[(0, 0), (0, 1), (0, 2), (1, 0), (1, 1), (1, 2), (2, 0), (2, 1), (2, 2)]
#可见x为外层循环,y为内层循环

#还还支持嵌套
new_list= [y*2 for y in [x*3 for x in range(3)]]
print(new_list)
#输出:[0, 6, 12]

#字典推导式
my_tuple_list = [('name', '橡皮擦'), ('age', 18),('class', 'no1'), ('like', 'python')]
my_dict = {key: value for key, value in my_tuple_list}
print(my_dict)
#输出:{'name': '橡皮擦', 'age': 18, 'class': 'no1', 'like': 'python'}

注释

#单行注释
#用井号 # 即可
#我被注释了!!!

'''
多行注释
成对的三个单引号 ' 或者双引号 " 即可
我被注释了!!
'''
"""
我也被注释了!
"""

元组

        1、特点:①列表使用中括号 [] ,元组使用小括号 ()

                        ②元组访问处理速度快

                        ③不能删除或修改元组中某个元素,只能删除整个元组 (del <元组名>)

                        ④特殊情况下元组的括号可以省略

        2、创建与访问

#创建元组方法1
tuple1 = tuple((1,2,3))
print(tuple1)

#创建方法2
tuple2 = (4,5,6)
print(tuple2)

#输出:
#(1, 2, 3)
#(4, 5, 6)

'''当要创建的元组中只包含一个元素时,必须带逗号。
如果不带逗号,会将左右括号默认视为运算符'''
tuple3 = (6,)
tuple4 = (6)
print(tuple3[0])
print(tuple4[0])
#输出:
#6
#TypeError: 'int' object is not subscriptable

#访问元组
#与列表一样
tuple5 = (7,8,9)
print(tuple5[1])  #访问tuple5第二个元素
#输出:8

输入输出

        1、输入可以用input(),input()接受表达式输入,并且把表达式的结果赋值给等号左边的变量

a = input("输入数字:")  #输入1212
print(a)
print(type(a))

#输出:
#输入数字:1212
#1212
#<class 'str'>

        2、输出

name = "张三"
age = 22
print("我叫%s,我今年%d岁了" % (name, age))
#输出:我叫张三,我今年22岁了

        3、常用格式符号

格式符号转换
%c字符
%s字符串
%d有符号十进制整数

逻辑运算符

        1、and 逻辑与。相当于c++中的&&,是短路与运算。左值false直接作为表达式值,不计算右值;左值true会计算右值并作为表达式的值

        2、or 逻辑或 。相当于c++中的 || ,也是短路或运算。左值为true直接作为表达式值,不计算右值;左值为false会计算右值并作为表达式的值

        3、not 逻辑非。对于布尔值会进行取反操作,对于非布尔值会先转换为布尔值(对于字符串,非空串为true,空串为false;对于数字,0为false,其他为true),然后再取反

if else

        与c不同的是判断条件可以不用加括号,且条件后要加冒号 :

        if 判断条件 :

                要执行的代码

        else if也与c不同,py将 else if 缩减成elif,最后也可以与else连用

        if A :

                print()

        elif B :

                print()

        else:

while

        与c不同的是py没有大括号来限定while要循环的内容,而改用缩进来确定,上面的ifelse也是如此

        while 循环条件 :

                要执行的代码

 for

        py中for多了一个句尾的else,可以用来执行不满足条件的代码,for和else行末记得加冒号

        for 临时变量 in 列表或字符串等 :

                循环满足条件时执行的代码

        else:

                循环不

满足条件时执行的代码

#示例
name = ''
for var in name:
    print(x)
else:
    print("no data")
#输出:no data

 切片

        切片时对操作对象截取其中一部分的操作,字符串,列表,元组都支持切片操作。

语法:[起始:结束:步长]  //中间时冒号:

值得注意的是,选取的区间为左闭右开型

#示例
name="abcd"
print(name[0:3])  #步长默认为1
#输出:abc

 字符串常见操作

         find

        检测字符串A是否存在字符串B中,存在返回索要值,否则返回-1

语法: B.find(A,start,end)

A = "c"

B = "abcdefghijkl"

print(B.find(A,0,len(B)))  #0是搜索的起始位置

#输出:2

         count

        返回字符串A在字符串B中出现的次数,语法格式与find相同,只要将find换为count

         replace

        将字符串C中的字符串A替换为B,最多换max次

语法:C.replace(A,B,max)

replace函数不会更改原字符串,只会给一个返回值,返回更改后的字符串

C = "abcdef"
print(C.replcae("abc","666"))
print(C)
#输出:
#666def
#abcdef

         split

        以str为分隔符切片mystr,max为最大分隔字符数,可以不写

语法:mystr.split(str,max)

mystr = "Here is your new Phone!!"
print(mystr.split(" ",2))
#输出:['Here', 'is', 'your new Phone!!']

         upper和lower

        将字符串全部变为大写,小写

 列表常用操作

        添加元素(append、extend、insert)

append:向列表添加元素

extend:将一个集合中的元素逐一添加到列表中

insert:在列表指定位置添加元素  ps:insert(index,obj),在index添加obj

#示例
a.append(5)
print(a)
a.extend(b)
print(a)
a.append(b)
print(a)
a.insert(1,0)
print(a)
'''
输出
[1, 2, 3, 4, 5]
[1, 2, 3, 4, 5, 8, 9]
[1, 2, 3, 4, 5, 8, 9, [8, 9]]
[1, 0, 2, 3, 4, 5, 8, 9, [8, 9]]
'''

         查找元素(in、not in、index、count)

in、not in:存在(不存在)返回true,否则返回false

count:返回元素出现次数

index:返回出现的位置

a = ['a', 'b', 'c', 'a', 'b']
print(a.index('a', 1, 4))
print(a.count('b'))
print(a.count('d'))
print(a.index('a', 1, 3)) #报错,因为'a'不在区间里

Traceback (most recent call last):
ValueError: 'a' is not in list
3
2
0

         删除元素(del、pop、remove)

del:根据下标删除

pop:删除最后一个元素

remove:根据元素的值进行删除

mylist = [1, 2, 3, 4, 5, 6, 7, 8, 9, ]
print(mylist)
del mylist[1]
print((mylist))
mylist.pop()
print(mylist)
mylist.remove(7)
print(mylist)
mylist.remove(9)  #会报错
print(mylist)
'''
输出
Traceback (most recent call last):
    mylist.remove(9)
ValueError: list.remove(x): x not in list
[1, 2, 3, 4, 5, 6, 7, 8, 9]
[1, 3, 4, 5, 6, 7, 8, 9]
[1, 3, 4, 5, 6, 7, 8]
[1, 3, 4, 5, 6, 8]
'''

         排序(sort、reverse)

sort:将集合排序为降序,设置reverse=true改为倒序

reverse:将集合逆置

a = [2, 6, 5, 9]
print(a)
a.reverse()
print(a)
a.sort()
print(a)
a.sort(reverse=True)
print(a)
'''
输出
[2, 6, 5, 9]
[9, 5, 6, 2]
[2, 5, 6, 9]
[9, 6, 5, 2]
'''

        字典

        字典是一种可变容器模型,可以储存任意类型对象。键与键值用冒号分隔,每对键与键值用逗号分隔,整个包裹在大括号里面。

语法:dic = { key1 : val1 , key2 : val2 , key3 : val3 }

        根据键值访问字典

dic = {'name': 'john', 'id': 666, 'sex': 'm', 'address': 'china'}
print(dic['name'])
print(dic['address'])
print(dic['age']) #不存在会报错
'''
输出
Traceback (most recent call last):
    print(dic['age'])
KeyError: 'age'
john
china
'''
#不确定是否存在可以用get()方法,不存在会返回None
print(dic.get('age'))
#输出:None

        添加元素

        使用变量名[‘键名’] = 数据,若'键'不存在字典中,就会新增这个元素

dic = {'name': 'john', 'id': 666, 'sex': 'm', 'address': 'china'}
newAge = input('输入年龄')
dic['age'] = int(newAge)
print(dic['age'])
#输出:
#输入年龄70
#70

        删除元素(del、clear)

del:删除指定元素

clear():删除整个字典

dic = {'name': 'john', 'id': 666, 'sex': 'm', 'address': 'china'}
print(dic)
del dic['address']
print(dic)
dic.clear()
print(dic)
#输出
#{'name': 'john', 'id': 666, 'sex': 'm', 'address': 'china'}
#{'name': 'john', 'id': 666, 'sex': 'm'}
#{}

         收集字典中所有的key(keys),value(values),(键,键值)(items)

        keys() , values() , items() 返回一个包含字典所有key , value , (键,键值)的视图对象。

        要注意的是三者返回的并不是list,不能直接用下标访问,但是可以通过list()转成list再用下标访问,三者用法相同。

dic = {'name': 'john', 'id': 666, 'sex': 'm', 'address': 'china'}
print(dic.keys())
print(dic.values())
print(dic.items())
print(list(dic.keys()))
print(list(dic.values()))
print(list(dic.items()))
#输出
#dict_keys(['name', 'id', 'sex', 'address'])
#dict_values(['john', 666, 'm', 'china'])
#dict_items([('name', 'john'), ('id', 666), ('sex', 'm'), ('address', 'china')])
#['name', 'id', 'sex', 'address']
#['john', 666, 'm', 'china']
#[('name', 'john'), ('id', 666), ('sex', 'm'), ('address', 'china')]

        判断key是否存在字典中

语法:键名 in 字典名  //存在返回true,否则返回false

可变类型数据与不可变类型数据

可变类型:在id(内存地址)不变的情况下,value(值)可以改变

不可变类型:value(值)改变,id(内存地址)也会改变(id变了意味着创建了新的内存空间)

可变类型:列表、字典

不可变类型:其他基本都是不可变,如字符串、布尔值、数字、元组、日期

函数

语法: def 函数名 (参数列表)  :

                  函数体

ps:def是define前三个字母

          传参

如果传入的参数是可变的对象(如字典、列表等),函数就可以修改原始值,但如果传入的是不可变对象(如数字、字符串、元组),就不会修改原始对象

def expand(a):
    for i in range(4):
        a[i] *= 10

eg2 = [1, 2, 3, 4]  # 列表
eg3 = (1, 2, 3, 4)  # 元组
expand(eg2)
expand(eg3) # 会报错,元组不能修改
print(eg2)
print(eg3)
#输出
#Traceback (most recent call last):
#   expand(eg3)
#    a[i] *= 10
#TypeError: 'tuple' object does not support item assignment
#[10, 20, 30, 40]
#(1, 2, 3, 4)

                返回值

py的返回值可以有多个

def fun(a,b):

        return a*2 , b*3

print(fun(1,1))  //输出:(2,3)

print(type(fun(1,1)))  //输出:<class 'tuple'>

                 局部与全局变量        

        在函数体内部对不可变类型的数据进行改动,不影响外面的全局变量,因为着相当于新建了一个局部变量,但是使用方法会对外部产生影响。

 lambda匿名函数

        语法:<函数名> = lambda <参数> : <表达式>

        ps:lambda时一个表达式,不是语句;lambda只能包含一个表达式,不能包含复合语句

#例子1
fun = lambda x, y: x + y
print(fun(7, 2))
#输出:9

#例子2
str = lambda a="aaa", b="bbb", c="ccc": a + b + c
print(str())
print(str("zzz"))
print(str("zzz", "ooo"))
'''
输出:
aaabbbccc
zzzbbbccc
zzzoooccc
'''

尾递归

        尾递归是指在函数返回的时候,调用自身本身,并且return语句不包含表达式。

        尾递归的效果和循环时一样的,普通的递归每加一层递归关系都会增加一层栈帧,每当函数返回会减少一层,所以有时候调用太多会导致栈溢出,而尾递归在执行时始终只会用一个栈帧,不会出现栈溢出的情况

#普通递归
def fun(int n):
    if n==1:
        return 1
    return n * fun(n-1)


#尾递归
def fun(int num , int n):
    if num==1:
        return 1
    return fun(num-1,num * n)

文件操作

  //新建一个文件

f = open('test.txt','w')

  //关闭这个文件

f.close()

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

别搜了,自己做

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值