python之路-基础篇-第二周

news/2024/6/17 18:52:08

一、Python解释器:

  • cpython为默认解释器,由C语言开发,目前使用最为广泛。
  • jpython 运行在Java平台上的python解释器,可以直接把Python代码编译成Java字节码执行;与之类似的还有IronPython(.net)
  • PyPy解释器,采用JIT技术,对Python代码进行动态编译,所以可以显著提高Python代码的执行速度。

二、推荐一本书:

python源码剖析


三、字符编码:

  • 起初,ASCII码,使用一个字节,8位,表示所有内容:256种字符。
    表示数字1:00000001
  • 后来,万国码,unicode,至少2个字节(16位):65536
    表示数字1:0000000000000001
  • 再后来,utf-8,对万国码进行按类压缩,优化存放空间
    数字1:00000001,8位
    汉字:3个字节
    • 在python2.x中存在转换的问题
      unicode -> utf8: encode
      utf8 -> unicode: decode
    • python3.x中不需要考虑此问题

四、执行脚本传入参数

使用sys.argv传入参数。

import sys
print(sys.argv)

执行结果:

#比如在脚本中传入三个参数,可是同时传入多个参数:

bogon:day02 felo$ python3 ex.py  argv1 argv2 argv3

['ex.py', 'argv1', 'argv2', 'argv3']

五、缓存

  • 数字:-5到257

>>> a = 1

>>> b = 1

>>> id(a), id(b)        #id一致,在缓冲池中

(4297537952, 4297537952)

>>> a = 10000

>>> b = 10000

>>> id(a),id(b)        #id不一致,不在缓冲池中

(4316106256, 4316105936)

>>> 
  • 字符串:按某种权重计算,具体的待查。。。

#

>>> a = 'hello'

>>> b = 'hello'

>>> id(a),id(b)

(4367149744, 4367149744)

六、字符串相加与格式化

  • 每次字符串相加,都会在内存中开辟新的空间,尽量不用
>>> print("hello\t" + "world.")
hello    world.
  • 使用字符串格式化比较好,可能只创建两次,相对来说更优化一些,建议尽量使用此方法

    • %s:格式化字符串
    • %d:格式化数字
    • %f:格式化浮点数
>>> name = 'felo'
>>> print('my name is %s.' % name)
my name is felo.
>>> 
>>> age = 18
>>> print('my name is %s.\nmy age is %d' % (name,age))
my name is felo.
my age is 18
>>> 

七、循环

  • for while (foreach)

  • break;continue;pass;return;exit

    • break:退出整个循环
    • continue: 退出本次循环
    • pass :占位
    • return:函数中使用
    • exit:程序退出,可以添加退出返回值

八、python中一切都是对象

对象是基于类创建的,所有的功能都是到类中找的。

老师的博客:http://www.cnblogs.com/wupeiqi/articles/5115190.html

使用type(a)能够找到类型,或类型所在的位置


九、数据类型介绍

1)数字

int的一些内置方法: *long,float也类似

  • __abs__方法:求绝对值

  • __add__方法:相加

  • __divmod__方法:元组方式返回除法结果取整和余数

  • __eq__方法:判断是否相等,返回布尔值

  • __float__方法:转化为浮点数

  • __floatdiv__方法:地板除,与5//6等价

  • __init__方法:类的构造方法,在创建对象的时候调用

  • __pow__方法:幂

举例:


a = 100
print('divmod 方法:a/7')
print(a.__divmod__(7))

print('\nabs方法:a的绝对值')
print(abs(a))
print(a.__abs__())

print('\nadd方法:a+7')
print(a.__add__(7))
print(a+7)

结果:


divmod 方法:a/7

(14, 2)



abs方法:a的绝对值

100

100



add方法:a+7

107

107

2)字符串

查看类型以及类中成员:

type():返回类名

dir():返回类成员

#例子:
name = 'felo'
print(type(name))
print(dir(name))

执行结果:


<class 'str'>         #str类型

#str的类成员

['__add__', '__class__', '__contains__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getnewargs__', '__gt__', '__hash__', '__init__', '__iter__', '__le__', '__len__', '__lt__', '__mod__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__rmod__', '__rmul__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'capitalize', 'casefold', 'center', 'count', 'encode', 'endswith', 'expandtabs', 'find', 'format', 'format_map', 'index', 'isalnum', 'isalpha', 'isdecimal', 'isdigit', 'isidentifier', 'islower', 'isnumeric', 'isprintable', 'isspace', 'istitle', 'isupper', 'join', 'ljust', 'lower', 'lstrip', 'maketrans', 'partition', 'replace', 'rfind', 'rindex', 'rjust', 'rpartition', 'rsplit', 'rstrip', 'split', 'splitlines', 'startswith', 'strip', 'swapcase', 'title', 'translate', 'upper', 'zfill']

几个字符串常见方法:

name = str('eric')
result = name.__contains__('er')                #此方法与in等价
print(result)
print('er' in name)            #in和__contains__一致
#
# ###python2.x中方法,3.x中不存在
# name = 'eric{0}'
# name.__format__('alex')
# print(name)


name = 'eric'
result = name.capitalize()    #首字母大写
print(result)

result = name.casefold()        #所有字符小写
print(result)

result = name.center(20, '*')   #居中显示,其余用*号填充
print(result)

result = name.endswith('x', 0, 3)   #切片判断以‘x’结尾
print(result)

result = name.startswith('e', 1, 3)     #切片判断以‘e’开头
print(result)

name = '理解'
result = name.encode('gbk')         #编码为gbk格式,默认是utf-8
print(result)

执行结果:


True

True

Eric

eric

********eric********

False

False

b'\xc0\xed\xbd\xe2'

另外一些方法:

name = 'a\tlex'
result = name.expandtabs()      #将TAB转换成空格,默认8个
print(result)
#可以将脚本转化,这样就不会因为空格或者TAB的原因导致脚本不能执行
执行结果:(只有7个空格,不知道为啥?)
a       lex
name = 'alex'
result = name.find('ex')     #返回找到的位置,没找到就返回-1
result2 = name.find('b')
print(result,result2)
执行结果:
2 -1
name = 'alex'
result = name.index('ex')   #返回找到的位置,没找到返回错误
print(result)
result2 = name.index('b')
print(result2)
执行结果:
Traceback (most recent call last)
File "C:/Users/yangfl/PycharmProjects/test/h.py", line 6, in <module>
 result2 = name.index('b')
ValueError: substring not found
2
name = 'alex {0} as {1}'
result = name.format('sb', 'eric')      #字符串拼接
print(result)
执行结果:
alex sb as eric
name = 'alex {name} as {id}'
result = name.format(name='sb', id='eric')      #字符串拼接
print(result)
执行结果:
alex sb as eric
li = ['s', 'b', 'a', 'l', 'e', 'x']
result = '_'.join(li)       #将序列连接起来,使用'_'
print(result)
执行结果:
s_b_a_l_e_x
name = 'alex'
result = name.ljust(10, '_')    #居左,其余均以"_"填充
result2 = name.rjust(10, '_')   #居右,其余均以"_"填充
print(result)
print(result2)

执行结果:
alex______
______alex
name = '   alex   '
result = name.rstrip()      #删除右边空格
result2 = name.lstrip()     #删除左边空格
result3 = name.strip()      #删除两边空格
print(result)
print(result2)
print(result3)

执行结果:
   alex
alex   
alex
# name.lstrip()       #删除左空格
# name.rstrip()
# name.maketrans()    #有空试下
name = 'alexissb'
result = name.partition('is')       #字符串分成三个部分
print(result)
result = name.replace('a', 'o', 1)     #替换,第三个参数为替换的个数
print(result)
# name.rfind()
# name.rindex()
# name.rpartition()
result = name.rsplit('i')        #这两个没什么区别,不用在意
print(result)
result = name.split('i')
print(result)

3)列表

列表是python中最为灵活的有序集合类型:

  • 任意对象的有序集合
    • 可以收集其他任意对象,而且按照由左至右的顺序排列
  • 通过偏移读取整
    • 与字符串类似
  • 可变长度,异构以及任意嵌套
    • 长度可变
  • 能够包含数字,字符串等
    • 属于可变序列的分类
    • 可在原序列操作删除、索引赋值等
  • 对象引用数组
    • 在标准的python解释器中,列表就是C数组而不是链接结构。

列表中常用方法:(列表类中的常用成员)

  • 切片操作:

li1 = [1, 2, 3, 4]
print(li1[1:2])  #大于等于1,小于2号索引
print(li1[:2])   #小于2号索引
print(li1[1:])   #大于1号索引
print(li1[0:3:2])    #大于等于0,小于3,相隔2
print(li1[:-1])  #-1之前

执行结果:
[2]
[1, 2]
[2, 3, 4]
[1, 3]
[1, 2, 3]

li1 =[11, 11, 22, 33]
li1.append(44)
print(li1)

li1.clear()
print(li1)


li1 = [11, 11, 22, 33]
result = li1.pop(3)      #按下标删除
print(result)

li1 = [11,11,22,33]
li1.remove(11)    #按值删除,默认删除第一个
print(li1)

li1 = [11,11,22,33]
li1.reverse()       #翻转
print(li1)

执行结果:


[11, 11, 22, 33, 44]

[]

33

[11, 22, 33]

[33, 22, 11, 11]

4)元组


tu = (11, 22, 34,)
li = list(tu)
print(tu)
print(li)
#元组中就两个成员需要注意
# tu.count()

# tu.index()

5)字典

#dic = {'k1':'v1','k2':'v2'}
dic = dict(k1='v1', k2='v2')

new_dic = dic.fromkeys(['k1', 'k2'], 'v1000')
print(new_dic)

print(dic['k1'])
print(dic['k2'])
#print(dic['k3'])       #报错
print(dic.get('k3'))
print(dic.get('k3', 'alex'))        #'k3'不存在的时候使用'alex'

dic = dict(k1='v1', k2='v2')
dic.pop('k1')           #指定key
print(dic)

dic = dict(k1='v1', k2='v2')
dic.popitem()       #无序的
print(dic)

dic['k3'] = 123
dic.setdefault('k4')        #默认值None
print(dic)

dic = dict(k1='v1', k2='v2')
dic.update({'k3':123})
print(dic)

执行结果:
{'k1': 'v1000', 'k2': 'v1000'}
v1
v2
None
alex
{'k2': 'v2'}
{'k1': 'v1'}
{'k4': None, 'k3': 123, 'k1': 'v1'}
{'k2': 'v2', 'k3': 123, 'k1': 'v1'}

举个小例子,将列表中小于66的数字和大于等于66的数字分成两部分,并将他们存放到字典中。
这几个数是:11, 22, 33, 44, 55, 66, 77, 88, 99, 90

li1 = [11, 22, 33, 44, 55, 66, 77, 88, 99, 90, ]
dic = {}

for i in li1:
    if i > 66:
        if 'k1' in dic.keys():
            dic['k1'].append(i)    #dic中key存在,value列表后追加i
        else:
            dic['k1'] = [i, ]    #dic中key不存在,新建一个,并将i做成列表赋值给这个key
    else:
        if 'k2' in dic.keys():
            dic['k2'].append(i)
        else:
            dic['k2'] = [i, ]

print(dic)

转载于:https://www.cnblogs.com/felo/p/5131657.html


http://www.niftyadmin.cn/n/1115475.html

相关文章

用Java实现AES/CBC/PKCS7Padding加解密

2019独角兽企业重金招聘Python工程师标准>>> 开发微信小程序的时候&#xff0c;第三方应用服务器需要解密微信服务器给的加密数据。当时小程序官方没有给出Java实现。网上的解决方案基本都差不多&#xff0c;但是示例代码不够清晰&#xff0c;逻辑混乱&#xff0c;这…

阿里重磅发布大规模图神经网络平台AliGraph,架构算法解读

图神经网络(GNN)主要是利用神经网络处理复杂的图数据&#xff0c;它将图数据转换到低维空间&#xff0c;同时最大限度保留结构和属性信息&#xff0c;并构造一个用于训练和推理的神经网络。在实际应用中&#xff0c;为了加速GNN训练和新算法的快速迭代&#xff0c;设计一套统一…

hibernate插入CLOB大数据类型

2019独角兽企业重金招聘Python工程师标准>>> HibernateTemplate对CLOB对象操作,No LobHandler found for configuration... 利用HibernateTemplate对CLOB对象操作Oracle中的varchar2对象最多只能存4000个字节&#xff0c;对于要进行大批量字符对象的存储来说显然是远…

[转]正则表达式的多行模式与单行模式

测试“多行模式” 测试一 注意&#xff1a;这里样例文本中3eeeee后面没有回车&#xff0c;光标就在e的后面。匹配的结果是3eeeee&#xff0c;如上图的Search Results区中所示。 为什么这里不能匹配1abcde和2abc&#xff1f; 开启多行模式 ^ 可以匹配字符串开头&#xff08;字符…

【bzoj4884】[Lydsy2017年5月月赛]太空猫 dp

原文地址&#xff1a;http://www.cnblogs.com/GXZlegend/p/6825431.html 题目描述 太空猫(SpaceCat)是一款画面精致、玩法有趣的休闲游戏&#xff0c;你需要控制一只坐在迷你飞碟上的猫咪在太空里不断探索&#xff0c;让大家看看你能飞得多远。游戏地图可以看成一个二维的网格图…

12Linux_Apache_vsftpd(匿名开发模式)

网站&#xff1a;让我们的用户可以通过浏览器去访问到的文档的资源。 windows:IIS Linux:Apache Nginx(吃得少&#xff0c;干的多) APACHE:基金会&#xff0c;公司&#xff0c;软件 httpd:软件名称&#xff0c;软件包名称 SELinux安全子系统&#xff1a; &#xff08;1&#xf…

网络服务——数据链路层--交换机:VLAN的理解

文章目录一、VLAN的概念:1、优点2、分类3、静态VALN的配置4、交换机三种接口模式5、VLAN跨交换机通信过程&#xff1a;二、课后小实验&#xff0c;加深理解&#xff1a;一、VLAN的概念: VLAN中文名为虚拟局域网&#xff0c;是将一个物理的LAN在逻辑上划分成多个广播域的通信技…

在Hibernate中使用原生SQL语句

使用原生SQL查询必须注意&#xff1a;程序必须选出所有的数据列才可被转换成持久化实体。假设实体在映射时有一个<many-to-one../>的关联指向另外一个实体&#xff0c;则SQL查询中必须返回该<many-to-one../>映射的外键列&#xff0c;否则将导致抛出"column n…