Python学习笔记_Python基础

  • Python 基础
  • 语句和语法
    • 注释
    • 继续
    • 代码组
    • 代码的缩进
    • 在一行书写多个语句
    • 模块
  • 变量赋值
    • 赋值操作符
    • 增量赋值
    • 多重赋值
    • 多元赋值
  • python编写的基本风格
    • 模块的结构和布局
  • 内存管理
    • 变量定义
    • 引用计数
      • 增加引用计数
      • 减少引用计数
      • del语句

Python 基础

语句和语法

注释

python中用#号进行注释

继续

如果一个语句需要跨行,那么需要用\来连接两个跨行的语句

if name == ‘qeesung‘ and     age == 23

在两种情况下是不需要使用反斜线来进行跨行连接的:

  • 一个闭合操作时,即含有小括号,中括号,花括号可以进行多行书写,比如在定义一个列表,元组字典的时候就可以进行跨行
alist = [2,2,3,4,                                                         5,6,7,8                                                           ]                                                                                                    
  • 在三引号包括下的字符串可以跨行书写
test_str = ‘‘‘Hello
World This is Great World
‘‘‘

代码组

缩进一个相同的语句的代码快,我们称之为代码组,比如if,while,class等语句都是结束的

代码的缩进

python是通过所经代码来区分代码块的。随着缩进深度的增加,代码的层次也在加深,没有缩进的代码是最高层次的,被称为脚本的主体(main)部分

在一行书写多个语句 (;)

之间我们讲过用\来将一个语句写在多行,现在我们可以用来将多个语句写在一行

import sys ; x = ‘foo‘ ; sys.stdout.write(x+‘\n‘)

模块

每一个python脚本文件都可以被当做是一个模块,模块以磁盘文件的形式存在。

模块里的代码可以是一段直接执行的脚本,也可以是的一堆类似库函数的代码

变量赋值

首先我们先来理解一下什么叫做对象,对象就是一个在内存中有类型的区域。

赋值操作符

python语句里面,=是主要的赋值操作符

anInt = 12
aString = ‘Hello World‘
# ...

注意:

  • python里面的赋值不是将一个值赋值给一个变量,在赋值时,不管这个对象是新创建的,还是一个已经存在的,都是将对象的引用赋值给变量
  • 在python里面的赋值语句并不会返回一个值,下面语句就是错误的
x = 1
y = (x=x+1)# error , 赋值语句不返回值

增量赋值

所谓的增量赋值就是采用下面的操作符:+=,-=,**=等操作符

注意:

增量赋值和一般的赋值操作不仅仅是写法上的改变,还有更加深层次的改变:

  • 一般赋值操作是一定会改变变量指向的对象的值
  • 增量赋值操作对于不可变对象来说,会改变变量指向的对象;对于可变对象来说,不会改变变量指向的对象

下面举个栗子:

一般赋值操作

print ‘+‘*6, ‘ number ‘, ‘+‘*6
number1 = 1
print id(number1)
number1 = 2
print id(number2)
print 

print ‘+‘*6,‘ list ‘ , ‘+‘*6
list1 = [1,2,3]
print id(list1)
list1 = [4,5,6]
print id(list1)

运行结果:

++++++ number ++++++

157259952

157259940

++++++ list ++++++

3077201548

3074661452

可见一般的赋值操作是会改变变量指向的对象的

增量赋值操作

print ‘+‘*6, ‘ number ‘, ‘+‘*6
number1 = 1
print id(number1)
number1 += 2
print id(number2)
print 

print ‘+‘*6,‘ list ‘ , ‘+‘*6
list1 = [1,2,3]
print id(list1)
list1 += [4,5,6]
print id(list1)

运行结果:

++++++ number ++++++

159398064

159398040

++++++ list ++++++

3077873292

3077873292

所以对于不可变对象来说,增量赋值操作是会改变变量指向的对象的,对于可变对象来说,增量操作是不会改变变量指向的对象的

多重赋值

看下面的栗子:

x = y = z = 1

新建了一个值为1的整形对象,然后将其引用传给x,y,z,三个变量

多元赋值

多元赋值其实就是元组的赋值

x, y, z=1, 2, `a string`

实际上就是下面的元组赋值

(x, y, z)=(1, 2, ‘a string‘)

python编写的基本风格

模块的结构和布局

在编写一个python脚本的时候可以按照下面的布局进行编写:

  1. 起始行:#/usr/bin/env python
  2. 模块文档:‘‘‘ this is a test modle ‘‘‘
  3. 模块导入:import sys
  4. 变量定义: list1 ={} ;number1 = 0
  5. 类定义:class MyClass:
  6. 函数定义: def func():
  7. 主程序: if __name__ == ‘__main__‘:

由于主程序代码不论是模块被导入还是直接执行都会运行,我们必须知道程序的运行方向,在某些情况下,一个应用程序需要导入另一个应用程序的一个模块,以便重用某些代码,这时,我们只想访问那些位域其他应用程序中的代码,而不想运行它们,我们可以通过__name__来判断一个程序是作为模块被导入还是作为程序来运行:

  • 如果模块被导入,__name__就是模块的名字;
  • 如果模块是被直接运行,__name__的值就是__main__

于是我们可以利用上面的这种机制,来将测试代码也写在主程序中,在独立运行代码的时候,我们就运行测试代码,在作为模块被导入的时候,就什么都不做

举个栗子:

#/usr/bin/env python
‘‘‘there are math function‘‘‘

def my_add(number1 , number2):
    return number1+number2

def my_sub(number1, number2):
    return number1-number2

if __name__ == ‘__main__‘:
    if 10 == my_add(4, 6):
        print ‘add test pass‘
    else:
        print ‘add test failed‘
    if -2 == my_sub(4, 6):
        print ‘sub test pass‘
    else:
        print ‘sub test failed‘

如果我们直接运行这个脚本,那么就会运行测试代码,如果作为模块导入,就什么都不做

内存管理

python定义的变量有下面的特性:

  • 变量无序事先声明
  • 变量无序指定类型
  • 程序猿不用关心内存管理
  • 变量名会被”回收”
  • del 语句能够直接释放资源

变量定义

python里面的变量只有被创建和赋值后才能被使用,因为任何变量如果没有初始化,那么变量就没有任何意义。

引用计数

在创建一个对象的时候,就创建一个引用计数,当这个对象不再需要时,也就是说,这个对象的引用计数变为0时,它就被垃圾回收。

增加引用计数

当对象被创建并将其引用赋值给变量时,该对象的引用计数就被设置为1

举个栗子:

x = 3.14 # 创建一个浮点型对象,并将引用赋值给x,引用计数为1
y = x # 为x指向的浮点型对象新建一个新的别名,引用计数增加为2

还有一些其他方法也能增加对象的引用计数,比如将该对象作为参数传入函数,或者将对象加入到容器对象当中。

#对象被创建
x = 3.14
#另外的别名被创建
y = x
#作为参数传递给函数
foobar(x)
#成为容器对象的一个对象
list1=[123, x, ‘xyz‘]

减少引用计数

当对象的引用被销毁时,引用计数会减少,比较常见的就是变量离开其作用范围时。比如函数运行结束时,所有的局部变量都被自动销毁,对象的引用计数就随之减少。

在下面的情况下,一个对象的引用计数会减少:

  • 一个本地对象引用离开了其作用范围
  • 对象的别名被销毁
del x 
  • 对象的一个别名被赋值给其他对象的引用
x = 123
  • 从一个窗口对象中移除
list1.remove(x)
  • 窗口对象本身被销毁
del list1

del语句

del 语句会删除对象的一个引用,当del所删除的对象的引用计数减少为0以后,该对象就会被垃圾收集器回收

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-08-05 13:04:53

Python学习笔记_Python基础的相关文章

Python学习笔记_Python基础二

列表.元祖: 创建列表 names = ["Eric","Tony","Jack"] 通过列表的下标访问列表中的元素,下标从0开始 >>> names[0] 'Eric' >>> names[1] 'Tony' >>> names[2] 'Jack' >>> names[-1]#还可以倒着取 'Jack' >>> names[-2] 'Tony' 列表切片取

Python学习笔记_Python对象

Python学习笔记_Python对象 Python对象 标准类型 其他内建类型 类型对象和type类型对象 Python的Null对象None 标准类型操作符 对象值的比较 对象身份比较 布尔类型 标准类型的内建函数 typeObj cmpobj1 obj2 strobj reprobj typeobj isinstanceobj 标准类型的分类 存储模型 更新模型 访问模型 不支持的类型 Python学习笔记_Python对象 首先来理解一个通俗的含义,什么是对象?其实对象无论在什么语言里面

01-Python学习笔记-基础语法

Python标识符 -d           在解析时显示调试信息 -O           生成优化代码 ( .pyo 文件 ) -S           启动时不引入查找Python路径的位置 -v            输出Python版本号 -X           从 1.6版本之后基于内建的异常(仅仅用于字符串)已过时. -c cmd     执行 Python 脚本,并将运行结果作为 cmd 字符串. file           在给定的python文件执行python脚本. P

python学习笔记(基础四:模块初识、pyc和PyCodeObject是什么)

一.模块初识(一) 模块,也叫库.库有标准库第三方库. 注意事项:文件名不能和导入的模块名相同 1. sys模块 import sys print(sys.path) #打印环境变量 print(sys.argv) #打印相对路径,在pycharm输出结果是绝对路径,因为在pycharm中调用 print(sys.argv[2]) #可以从数据列表中取值,[2]指取第三位.        标准库存放位置:C:\Python35\Lib 第三方库存放位置C:\Python35\Lib\site-p

Python学习笔记-Day1-Python基础

1.python诞生 关于Python的起源,吉多·范罗苏姆在1996年写到: 六 年前,在1989年12月,我在寻找一门"课余"编程项目来打发圣诞节前后的时间.我的办公室会关门,但我有一台家用电脑,而且没有太多其它东西.我决定 为当时我正构思的一个新的脚本语言写一个解释器,它是ABC语言的后代,对UNIX / C程序员会有吸引力.作为一个略微有些无关想法的人,和一个蒙提·派森的飞行马戏团的狂热爱好者,我选择了Python作为项目的标题 吉多·范罗苏姆GITHUB:https://gi

python 学习笔记day03-python基础、python对象、数字、函数

python基础 语句和语法 注释及续行 首要说明的是:尽管python可读性最好的语言之一,这并不意味者程序员在代码中就可以不写注释 和很多UNIX脚本类似,python注释语句从#字符开始 注释可以在一行的任何地方开始,解释器会忽略掉该行#之后的所有内容 一行过长的语句可以使用反斜杠\分解成几行 缩进及代码组 缩进相同的一组语句构成一个代码块,称之为代码组 首行以关键字开始,以冒号:结束,该行之后的一行或多行代码构成代码组 如果代码组只有一行,可以将其直接写在冒号后面,但是这样的写法可读性差

Python学习笔记——面向对象基础

1.类和实例 1.1类的定义 类的定义使用class关键字,其后紧跟类名(通常大写开头),紧接着是(object),object是该类继承的类名,没有就继承object类. 实例化时就是类名+(),有参数需要传入参数. class Student(object): pass bart = Student() 类的属性定义在_init_方法中(相当于java的构造方法),该方法的第一个参数永远是self,在实例化时必须传入相应的参数(除self外) class Student(object): d

python学习笔记(一) - 基础

一. 第一个小程序: python语法比较简单,采用缩进的方式,如下所示: a = 100 if a >= 0: print a else: print -a 使用#进行注释,其他的每一行都是一个语句,当语句以冒号":"结尾时,缩进的语句视为代码块. 按照约定俗成,一般使用Tab键缩进,或按四个空格. 注意:python程序是大小写敏感的. 二. 数据类型和变量 (1) 数据类型: a. 整数: python可以处理任意大小的整数 可以使用十六进制表示整数:0x前缀和0-9,a-

Python学习笔记-Day2-Python基础之元祖操作

元组的常用操作包括但不限于以下操作: 元组的索引,计数等 这里将对列表的内置操作方法进行总结归纳,重点是以示例的方式进行展示. 使用type获取创建对象的类 type(tuple) 使用dir获取类的成员dir(list) 使用vars获取类的成员和各个成员的值 1.    tuple.count   返回元组元素个数 2.    tuple.index 返回元组索引