Python学习笔记之入门(第二篇)

1、第一个Python代码

在Linux下/home/zx 目录下新建hello.py文件

1 #vim hello.py   //添加如下内容
2
3 #!/usr/bin/env python
4
5 # -*- coding:utf-8 -*-
6 print "Hello,World"
7
8 #chmod +x hello.py  //添加执行权限

执行代码:

./hello.py

结果:

python内部执行过程如下:
   python首先把hello.py文件读到内存当中,然后经过语法分析和词法分析之后,假如文本没有问题会把文本的内容交给编译器,编译器会把文本的内容编译成字节码,然后执行字节码,把字节码转换成机器码,在进行CPU调度。

2、注释

当行注视:# 被注释内容

多行注释:""" 被注释内容 """ 或者 ‘‘‘被注释内容‘‘‘。

3、导入模块

import sys //导入sys模块

4、捕获参数

捕获参数,并存入到集合

import sys.argv

比如:test内容如下

1 #vim test.py
2
3 #!/usr/bin/env python
4 # -*- coding:utf-8 -*-
5 import sys
6 print sys.argv

执行代码:

[email protected]:~$ ./test.py localhost:8001

执行结果:
 [‘./test.py‘, ‘localhost:8001‘]

5、python编译:

经过编译成字节码文件 .pyc文件,反编译成 .py;如果.pyc 和 .py 内容相同,
则.pyc 优先级高,否则,先查找.py,再重新编译生成 .pyc 文件。

6、变量

1)声明变量:

name = "tom"

上述代码声明了一个变量,变量名为:name,变量name的值为:"tom"

变量的作用:昵称,其代指内存里某个地址中保存的内容。

变量命名规则:
1)变量名只能以 数字、字母、下划线组成
2)第一个字符只能为字母、下划线;不能为数字
3)不要使用内置变量名
4)以下关键字不能声明为变量名
[‘and‘, ‘as‘, ‘assert‘, ‘break‘, ‘class‘, ‘continue‘, ‘def‘, ‘del‘, ‘elif‘, ‘else‘, ‘except‘, ‘exec‘, ‘finally‘, ‘for‘, ‘from‘, ‘global‘, ‘if‘, ‘import‘, ‘in‘, ‘is‘, ‘lambda‘, ‘not‘, ‘or‘, ‘pass‘, ‘print‘, ‘raise‘, ‘return‘, ‘try‘, ‘while‘, ‘with‘, ‘yield‘]

2)变量赋值

比如:

#!/usr/bin/env python
# -*- coding:utf-8 -*-

name1 = "tom"
name2 = name1

name1 = "Jerry"

print "name1:",name1      //打印name1值
print "name2:",name2     //打印name2值

执行结果:

[email protected]:~$ ./name1.py
name1: Jerry
name2: tom

为什么name2值不等于Jerry?

答:1)在执行name1 = "tom",解释器创建了字符串"tom"和变量name1,并把name1指向"tom"。

2)执行name2 = name1,解释器创建了变量name2,并把name2指向name1指向的字符串"tom"。

3)执行name1 = "Jerry",解释器创建了字符串"Jerry",并把name1的指向改为"Jerry",但name2并没有更改。

所以,最后打印变量name2的结果自然是"tom"了。

字符串特性:一旦修改,重新创建

以下是分配两块地址池的:

num1 = 7
num2 = 7

id(num1),id(num2) 指针地址一样,同一块内存指针池(看起来一样,是内部进行优化的,相当于在内部循环了一遍,当循环了一遍之后,发现有一个id1也是这个地址,于是也将id2指向这个地址,实际上是开辟两块指针空间的)

如果缓冲池过大,就会新开辟一块空间,缓冲池就会将多的扔掉

num1 = 700
num2 = 700

id(num1),id(num2) 指针地址不一样

7、输出和输入  -->以下代码在Windows上实现的。

输出:

用print加上字符串,就可以向屏幕上输出指定的文字。比如输出“Hello,world”,用代码实现如下:

>>> print "Hello,world"
Hello,world
>>>

print语句也可以跟上多个字符串,用逗号","会输出一个空格,因此,输出的字符串是这样的拼起来的:

>>> print ‘My favorite fruit is‘,‘apple‘,‘banana‘,‘pear‘
My favorite fruit is apple banana pear
>>>

输入:

如果要让用户从电脑输入一些字符,python提供了raw_input函数和getpass模块,可以让用户输入字符串,并存放到一个变量里。比如输入用户名和密码:
例如:

# -*- coding: utf-8 -*-
import getpass
name = raw_input("请输入用户名:".decode(‘utf-8‘).encode(‘gbk‘))
pwd = getpass.getpass()

print name
print pwd

8、流程控制-->以下代码都在Windows下实现的。

需求1:判断用户名是否等于“tom”,打印“登录成功”,否则,打印“登录失败”。

# -*- coding: utf-8 -*-name = raw_input("请输入用户名:".decode(‘utf-8‘).encode(‘gbk‘))  //输入tom
if name == "tom":  //值对比,内存地址对比,
    print u"登录成功"
else:
    print u"登录失败"

需求2:如果用户输入用户是"tom",就打印"普通用户";如果用户输入用户是"jerry",就打印"管理员";如果用户输入用户是"jack",就打印"超级管理员";否则,打印"输入有误"。
代码如下:

# -*- coding: utf-8 -*-name == raw_input("请输入用户名:".decode(‘utf-8‘).encode(‘gbk‘))  //这里进行编码转换,否则不能正常显示中文。
if name == "tom":
    print u"普通用户"   //正常打印中文需要加上‘u‘
else if name == "jerry":
   print u"管理员"
else if name == "jack":
   print u"超级管理员"
else:
    print u"输入有误"

需求3:做一个登录测试,如果输入用户名是"tom",并且密码等于"123",就打印"登录成功",否则,"登入失败"。

# -*- coding: utf-8 -*-
import getpass
name = raw_input("请输入用户名:".decode(‘utf-8‘).encode(‘gbk‘))
pwd = getpass.getpass()
if name == "tom" and pwd == "123":
    print u"登入成功"
else:
    print u"登录失败"

9、数据类型
数据类型总体分为两部分:

1)、单值
     数字:整型、长整型、浮点型、复数
     布尔值:真或假,1或0
     字符串:"Hello,world"2)、集合
     列表、元组、字典、哈希表

1)、int(整型)
   在32位机器上,整数的位数为32位,取值范围为-2**31~2**31-1,即-2147483648~2147483647
   在64位系统上,整数的位数为64位,取值范围为-2**63~2**63-1,即-9223372036854775808~9223372036854775807
2)、长整型
    跟C语言不同,Python的长整数没有指定位宽,即:Python没有限制长整数数值的大小,但实际上由于机器内存有限,我们使用的长整数数值不可能无限大。
    注意:自从Python2.2起,如果整数发生溢出,Python会自动将整数数据转换为长整数,所以如今在长整数数据后面不加字母L也不会导致严重后果了。
3)、浮点型
     浮点数用来处理实数,即带有小数的数字。类似于C语言中的double类型,占8个字节(64位),其中52位表示底,11位表示指数,剩下的一位表示符号。
4)、复数
     复数由实数部分和虚数部分组成,一般形式为x+yj,其中的x是复数的实数部分,y是复数的虚数部分,这里的x和y都是实数。
 注:Python中存在小数字池:-5 ~ 257
5)、布尔值
     真或假
   1 或 0

6)字符串

万恶的字符串拼接:

  python中的字符串在C语言中体现为是一个字符数组,每次创建字符串时候需要在内存中开辟一块连续的空,并且一旦需要修改字符串的话,就需要再次开辟空间,万恶的+号每出现一次就会在内从中重新开辟一块空间。

a.字符串格式化

在Python中,采用的格式化方式和C语言是一致的,用%实现,举例如下:

>>> ‘Hello,%s‘ %‘world‘
‘Hello,world‘
>>> ‘Hi,%s,you have $%d‘ %(‘Mechael‘,1000)
‘Hi,Mechael,you have $1000‘
>>> 常见的占位符有:%d  整数%f  浮点数%s  字符串

b.打印字符串

>>> print ‘tom‘  #使用单引号
tom
>>> print "tom"  #使用双引号
tom
>>> print ‘‘‘line1  #使用3个引号,可以是3个双引号或者单引号
... line2
... line3
... line4‘‘‘
line1
line2
line3
line4
>>> 

c.字符串切片

>>> name = "jerry">>> name[0]   #打印索引为0的值,输出值为:j‘j‘>>> name[0:2]  #打印索引从0到2的值,不包括2(即<),输出值为:je‘je‘>>> name[-1]   #打印最后一个,输出值为:y‘y‘>>> name[:-1]  #打印索引从0开始至倒数第二字符,不包括自己,输出值为:jerr‘jerr‘

d.统计长度

>>> len(name)  #统计字符串长度
5

e.去除两边的字符

>>> name = "   jerry   "
>>> name.strip()      #去除两边空格
‘jerry‘
>>> name.lstrip()    #去除左边空格
‘jerry   ‘
>>> name.rstrip()    #去除右边空格
‘   jerry‘
>>> 

 f.分割

>>> name = "tom,25,man"
>>> name.split(‘,‘)
[‘tom‘, ‘25‘, ‘man‘]

10、列表(list)
Python内置的一种数据类型是列表:list。list是一种有序的集合,可以随时添加和删除其中的元素。

1)创建列表:
name_list = [‘tom‘,‘jerry‘,‘jack‘]
2)获取list元素的个数
>>> len(name_list)
3
3)用索引来访问list中每一个位置的元素
>>> name_list[0]
‘tom‘
>>> name_list[1]
‘jerry‘
>>> name_list[2]
‘jack‘
>>> name_list[-1]
‘jack‘
>>>
4)往list追加元素到末尾
>>> name_list.append(‘Adam‘)
>>> name_list
[‘tom‘, ‘jerry‘, ‘jack‘, ‘Adam‘]
>>> 

5)把元素插入到指定的位置,比如索引号为1的位置:
>>> name_list.insert(1,‘Bob‘)
>>> name_list
[‘tom‘, ‘Bob‘, ‘jerry‘, ‘jack‘, ‘Adam‘]
>>>
6)删除lsit末尾的元素,用pop()方法
>>> name_list.pop()
‘Adam‘
>>> name_list
[‘tom‘, ‘Bob‘, ‘jerry‘, ‘jack‘]
>>>
7)要删除指定位置的元素,用pop(i)方法,其中i是索引位置:
>>> name_list.pop(1)
‘Bob‘
>>> name_list
[‘tom‘, ‘jerry‘, ‘jack‘]
>>>
8)把某个元素替换成别的元素
>>> name_list[1] = ‘Tracy‘
>>> name_list
[‘tom‘, ‘Tracy‘, ‘jack‘]
>>>
9)join (列表变成字符串)
>>> ‘,‘.join(name_list)
‘tom,Tracy,jack‘
10)in(包含,判断元素是否在列表中)
>>> ‘tom‘ in name_list
True
>>> 

11、元组(没有增删改),其他和列表一样

>>> name_list = (‘tom‘,‘Jerry‘,‘jack‘)
>>> name_list
(‘tom‘, ‘Jerry‘, ‘jack‘)

总结:

列表(list),字符串(str),元组(tuple)

共同点: 切片、索引、len() 、in

不同点:

str:重新开辟空间

list:修改后,不变

元组(tuple): 不允许修改

12、for循环

# -*- coding: utf-8 -*-
name_list = [‘tom‘,‘jerry‘,‘jack‘]
for item in name_list:
    if item == ‘tom‘:
        print "How are you"
        continue   #结束当前循环

    if item == ‘jerry‘:
        print "hello"
        break    #跳出循环

13、while循环

while 条件:
    print "..."

while True:    #死循环
    print "True"

14、字典,键值对(字典无序,特殊的for循环)
字典:由key和value存储方式

# -*- coding: utf-8 -*-
person = {"name":"tom","age":25,"gender":"man"}

print person.keys()
print person.values()
print person[‘name‘] 

for keys,values in person.items():
  print keys,values
  print "############"
执行结果:
F:\code>python person.py
[‘gender‘, ‘age‘, ‘name‘]
[‘man‘, 25, ‘tom‘]
tom
gender man
############
age 25
############
name tom
############
说明:
person.keys()  #所有key,得到列表
person.values() #所有value,得到列表
person.items()  #所有元素,仅for循环时使用。

15、运算符

1)算术运算符:
 +:加
 -:减
 *:乘
 /:除
 %:取模,20%10输出结果0
 **:幂
 //:取整除-返回商的整数部分,9//2输出结果4、9.0//2.0输出结果4.0

2)比较运算符
==:等于-比较对象是否相等
!=:不等于-比较两个对象是否不相等
<>:不等于-比较两个对象是否不相等
>:大于-返回x是否大于y
<:小于
>=:大于等于
<=:小于等于

3)赋值运算符
=:简单的赋值运算符
+=:加法赋值运算符
-=:减法赋值运算符
*=:乘法赋值运算符
/=:除法赋值运算符
%=:取模赋值运算符,c%10等效于c=c%10
**=:幂赋值运算符
//=:取整数赋值运算符

4)位运算符
&:按位与运算符
|:按位或运算符
^:按位异或运算符
~:按位取反运算符
<<:左移动运算符
>>:有右移动运算符

5)逻辑运算符
and:布尔与
or:布尔或
not:布尔非

6)成员运算符
in:如果在指定的序列中找到值返回True,否则返回False。
not in:如果在指定的序列中没有找到值返回True,否则返回False。

7)身份运算符
is:is是判断两个标识符是不是引用自一个对象
is not:is not是判断两个标识符是不是引用自不同对象

16、文件操作

打开文件:

  file_obj = file("文件路径","模式")
或者
file_list = open(‘文件路径‘,‘模式‘)
打开文件模式有:
r,以只读方式打开文件
r+,打开一个文件用于读写。文件指针将会放在文件的开头
w,打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
a,打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
w+,打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。

#找到文件
文件路径 E:/log.txt

#打开文件
file_obj = file(文件路径,‘r‘)

#文件操作,读写
file_obj.read() //将所有读入到内存
file_obj.readlines() //一行一行读入到内存
for line in file_obj.xreadlines()
print line
上面改成下面的:
for line in file_obj: //每次循环,只读一行,避免全部读入内存

file_obj.write() //写
file_obj.writeline() //一行一行写
#文件关闭
file_obj.close()

需求:将用户每登陆一次,记录一次登陆次数(通过操作文件实现)

log.txt文件内容格式如下:
tom;123;1
jack;456;2
代码如下:
# -*- coding: utf-8 -*-
file_obj = file(‘F:\code\day1\log.txt‘,‘r+‘)
line_list = file_obj.readlines()
#print  line_list -->打印结果:[‘tom;123;1\n‘, ‘jack;456;2‘]
my_list = []  //定义一个空列表
for ele in line_list:
    #print ele  -->打印结果: tom;123;1

 #                            jack;456;2
    line = ele.strip()  //把\n删掉
    #print line  -->打印结果:tom;123;1
 #                           jack;456;2

    value_list = line.split(‘;‘)  //分割后,转换成列表。
    #print value_list   -->打印结果:[‘tom‘, ‘123‘, ‘1‘]
 #                                  [‘jack‘, ‘456‘, ‘2‘]

    last_value = int(value_list[-1])  //把最后一个值转换成整数
    #最后一个数,转换成整型
    #print last_value  -->打印结果:1 和 2
    #print type(last_value)  -->打印结果: <type ‘int‘>

    last_value += 1  //将最后一个值加‘1’
    #print last_value
    value_list[-1] = str(last_value)
    #更新后的列表
    #print value_list  -->打印结果:  [‘tom‘, ‘123‘, ‘2‘]
#                                     [‘jack‘, ‘456‘, ‘3‘]
    value_str = ‘;‘.join(value_list)
    #将列表转换成字符串
    #print value_str  -->打印结果:tom;123;1
#                                  jack;456;2

    my_list.append(value_str)
#print my_list  -->打印结果:[‘tom;123;2‘, ‘jack;456;3‘]
file_obj.seek(0)  //
my_str = ‘\n‘.join(my_list)   //添加\n
#print my_str
file_obj.write(my_str)
file_obj.close()

执行结果:
tom;123;2
jack;456;3

提示:seek():移动文件指针到不同的位置,可以指定偏移量和起始位置。起始位置0表示从文件头开始,1表示从当前位置开始,2表示从文件尾开始,默认是0.
时间: 2024-08-06 07:58:19

Python学习笔记之入门(第二篇)的相关文章

VS2013中Python学习笔记[基础入门]

前言 在上一节中简单的介绍了在VS2013中如何进行开发Hello World,在VS2013中进行搭建了环境http://www.cnblogs.com/aehyok/p/3986168.html.本节主要来简单的学习一下关于Python的基础. Python基础入门 1.打印一个字符串Hello World. print('Hello World') 2.打印一个路径 print('C:\aehyok\aehyok') 可以发现\a发生了转义.如果不想发生转义,只需要在字符串前添加一个r p

python学习笔记--Django入门四 管理站点

上一节  Django入门三 Django 与数据库的交互:数据建模 "管理员界面"是基础功能中的重要部分.. 激活管理员界面 管理界面是 Django 中最酷的一部分.但是不是所有人都需要它,所以它是可选的.这也就意味着你需要跟着三个步骤来激活它. 在你的 models 中加入admin metadata. 不是所有的models都能够(或应该)被管理员编辑,你需要给models标记一个管理员接口(interface),通过给models添加一个内部类'admin'完成接口标记.所以

Python学习笔记——正则表达式入门

# 本文对正则知识不做详细解释,仅作入门级的正则知识目录. 正则表达式的强大早有耳闻,大一时参加一次选拔考试,题目就是用做个HTML解析器,正则的优势表现得淋漓尽致.题外话不多讲,直接上干货: 1. 元字符: 与之对应的还有反义字符,大部分为小写字母变大写,例如\D表示匹配非数字的字符. 2. 重复(即匹配变长的字符串): 元字符可匹配单一的字符类型,若想匹配长度未知或长度限定的字符串需要在后边加上限定符. 3. 范围与分组: 有时元字符并不能满足匹配字符的需求,这时就需要[]来圈定匹配范围,例

[知了堂学习笔记]_css3特效第二篇--行走的线条&amp;&amp;置顶导航栏

一.行走的线条. 效果图(加载可能会慢一点儿,请稍等...): html代码: 1 <div class="movingLines"> 2 <img src="images/ser2.jpg" alt=""><!-- 背景图片--> 3 <div class="cover cover2"><!-- 遮盖层--> 4 <div class="innerB

学习笔记 第四周 第二篇

仿真作业 对于老师所给的交流电机模型,其正常工作时,旋转磁场的转速 n0=60f/p=1500r/min 一般情况下,三相异步电动机的额定转速nN=(0.94~0.985) n0,运行老师所给的电机模型,知该电机的额定转速约为1490r/min 启动方法的选择 总体要求是,在保证电流较小的情况下,拥有较大的启动转矩. 参考书P70几种常用启动方法的比较可知,在启动电流相同的情况下,自耦变压器降压启动的启动转矩较大.Y-△降压启动也有良好的启动特性,但考虑到自耦变压器降压启动的K值可变,选择性更多

VS2013中Python学习笔记[Django Web的第一个网页]

前言 前面我简单介绍了Python的Hello World.看到有人问我搞搞Python的Web,一时兴起,就来试试看. 第一篇 VS2013中Python学习笔记[环境搭建] 简单介绍Python环境的搭建过程,以及Hello World的实现. 第二篇 VS2013中Python学习笔记[基础入门] 我简单学习使用了Python的几个基础的知识点. 第一个Web页面 第一步:首先打开VS2013开发工具 ,新建项目,选择Django Project模版. 修改项目名称,可以查看到项目的文件结

Python学习笔记基础篇——总览

Python初识与简介[开篇] Python学习笔记——基础篇[第一周]——变量与赋值.用户交互.条件判断.循环控制.数据类型.文本操作 Python学习笔记——基础篇[第二周]——解释器.字符串.列表.字典.主文件判断.对象 Python学习笔记——基础篇1[第三周]——set集合 Python学习笔记——基础篇2[第三周]——计数器.有序字典.元组.单(双)向队列.深浅拷贝.函数.装饰器 Python学习笔记——基础篇[第四周]——迭代器&生成器.装饰器.递归.算法.正则表达式 Python

现代C++学习笔记之一入门篇:智能指针(C++ 11)

原始指针:通过new建立的*指针 智能指针:通过智能指针关键字(unique_ptr, shared_ptr ,weak_ptr)建立的指针 在现代 C++ 编程中,标准库包含智能指针,该指针用于确保程序不存在内存和资源泄漏且是异常安全的. 在现代 C++ 中,原始指针仅用于范围有限的小代码块.循环或者性能至关重要且不会混淆所有权的 Helper 函数中. 1 void UseRawPointer() 2 { 3 // Using a raw pointer -- not recommended

Python学习笔记进阶篇——总览

Python学习笔记——进阶篇[第八周]———进程.线程.协程篇(Socket编程进阶&多线程.多进程) Python学习笔记——进阶篇[第八周]———进程.线程.协程篇(异常处理) Python学习笔记——进阶篇[第八周]———进程.线程.协程篇(多线程与进程池) Python学习笔记——进阶篇[第九周]———线程.进程.协程篇(队列Queue和生产者消费者模型) Python学习笔记——进阶篇[第九周]———协程 Python学习笔记——进阶篇[第九周]———MYSQL操作