Python 基础

语句和语法

凝视

python中用#号进行凝视

继续

假设一个语句须要跨行,那么须要用\来连接两个跨行的语句

  1. if name == 'qeesung' and \
  2. age == 23

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

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

代码组

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

代码的缩进

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

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

之间我们讲过用\来将一个语句写在多行,如今我们能够用来将多个语句写在一行

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

模块

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

模块里的代码能够是一段直接执行的脚本,也能够是的一堆相似库函数的代码

变量赋值

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

赋值操作符

python语句里面,=是基本的赋值操作符

  1. anInt = 12
  2. aString = 'Hello World'
  3. # ...

注意:

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

增量赋值

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

注意:

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

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

以下举个栗子:

一般赋值操作

  1. print '+'*6, ' number ', '+'*6
  2. number1 = 1
  3. print id(number1)
  4. number1 = 2
  5. print id(number2)
  6. print
  7. print '+'*6,' list ' , '+'*6
  8. list1 = [1,2,3]
  9. print id(list1)
  10. list1 = [4,5,6]
  11. print id(list1)

执行结果:

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

157259952

157259940

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

3077201548

3074661452

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

增量赋值操作

  1. print '+'*6, ' number ', '+'*6
  2. number1 = 1
  3. print id(number1)
  4. number1 += 2
  5. print id(number2)
  6. print
  7. print '+'*6,' list ' , '+'*6
  8. list1 = [1,2,3]
  9. print id(list1)
  10. list1 += [4,5,6]
  11. print id(list1)

执行结果:

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

159398064

159398040

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

3077873292

3077873292

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

多重赋值

看以下的栗子:

  1. x = y = z = 1

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

多元赋值

多元赋值事实上就是元组的赋值

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

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

  1. 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__

于是我们能够利用上面的这样的机制,来将測试代码也写在主程序中,在独立执行代码的时候,我们就执行測试代码,在作为模块被导入的时候。就什么都不做

举个栗子:

  1. #/usr/bin/env python
  2. '''there are math function'''
  3. def my_add(number1 , number2):
  4. return number1+number2
  5. def my_sub(number1, number2):
  6. return number1-number2
  7. if __name__ == '__main__':
  8. if 10 == my_add(4, 6):
  9. print 'add test pass'
  10. else:
  11. print 'add test failed'
  12. if -2 == my_sub(4, 6):
  13. print 'sub test pass'
  14. else:
  15. print 'sub test failed'

假设我们直接执行这个脚本。那么就会执行測试代码,假设作为模块导入,就什么都不做

内存管理

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

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

变量定义

python里面的变量仅仅有被创建和赋值后才干被使用,由于不论什么变量假设没有初始化,那么变量就没有不论什么意义。

引用计数

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

添加引用计数

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

举个栗子:

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

另一些其它方法也能添加对象的引用计数,比方将该对象作为參数传入函数,或者将对象添加到容器对象其中。

  1. #对象被创建
  2. x = 3.14
  3. #另外的别名被创建
  4. y = x
  5. #作为參数传递给函数
  6. foobar(x)
  7. #成为容器对象的一个对象
  8. list1=[123, x, 'xyz']

降低引用计数

当对象的引用被销毁时。引用计数会降低。比較常见的就是变量离开其作用范围时。

比方函数执行结束时。全部的局部变量都被自己主动销毁,对象的引用计数就随之降低。

在以下的情况下,一个对象的引用计数会降低:

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

del语句

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

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

  1. Python学习笔记_Python对象

    Python学习笔记_Python对象 Python对象 标准类型 其它内建类型 类型对象和type类型对象 Python的Null对象None 标准类型操作符 对象值的比較 对象身份比較 布尔类型 ...

  2. Python学习笔记之基础篇(-)python介绍与安装

    Python学习笔记之基础篇(-)初识python Python的理念:崇尚优美.清晰.简单,是一个优秀并广泛使用的语言. python的历史: 1989年,为了打发圣诞节假期,作者Guido开始写P ...

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

    一.模块初识(一) 模块,也叫库.库有标准库第三方库. 注意事项:文件名不能和导入的模块名相同 1. sys模块 import sys print(sys.path) #打印环境变量 print(sy ...

  4. Python学习笔记:基础

    本文根据廖雪峰的博客,学习整理笔记.主要内容有:基本数据类型,容器数据类型,变量及其作用域,判断及循环语法,函数式编程,面向对象,模块等概念. 数据类型 在python中,能够直接处理的数据类型有以下 ...

  5. Python学习笔记day01--Python基础

    1 python的应用     Python崇尚优美.清晰.简单,是一个优秀并广泛使用的语言.     Python可以应用于众多领域,如:数据分析.组件集成.网络服务.图像处理.数值计算和科学计算等 ...

  6. Python学习笔记之基础篇(二)python入门

    一.pycharm 的下载与安装: 使用教程:https://www.cnblogs.com/jin-xin/articles/9811379.html 破解的方法:http://xianchang. ...

  7. python学习笔记(基础三:if else流程判断、while循环、for循环)

    if else流程判断 getpass在pycharm中无法使用,在命令行窗口中进入python环境可以使用. import getpassusername = input("usernam ...

  8. python学习笔记之基础一(第一天)

    1. python字符介绍 在C语言中没有字符串,只有字符 在python中的字符串hello,在C语言中是以字符数组在内存存放['h','e','l','l','o'],如果对字符串修改,则是在内存 ...

  9. Python学习笔记-Day1-Python基础

    1.python诞生 关于Python的起源,吉多·范罗苏姆在1996年写到: 六 年前,在1989年12月,我在寻找一门“课余”编程项目来打发圣诞节前后的时间.我的办公室会关门,但我有一台家用电脑, ...

随机推荐

  1. Codeforces Round #262 (Div. 2)解题报告

    详见:http://robotcator.logdown.com/posts/221514-codeforces-round-262-div-2 1:A. Vasya and Socks   http ...

  2. OS之os.fork()

    有两种方式来实现并发性, 一种方式是让每个“任务"或“进程”在单独的内在空间中工作,每个都有自已的工作内存区域.不过,虽然进程可在单独的内存空间中执行,但除非这些进程在单独的处理器上执行,否 ...

  3. vue created 生命周期

    在实例创建完成后被立即调用.在这一步,实例已完成以下的配置:数据观测 (data observer),属性和方法的运算,watch/event 事件回调.然而,挂载阶段还没开始,$el属性目前不可见. ...

  4. WIN10 当中装BDM驱动

      方法: 禁用第三方签名 将插件替换原有的dll   1.参考此篇文档 http://jingyan.baidu.com/article/375c8e19c2b25b25f2a229a3.html ...

  5. webcat——基于netty的http和websocket框架

    代码地址如下:http://www.demodashi.com/demo/12687.html Webcat是一个基于netty的简单.高性能服务端框架,目前提供http和websocket两种协议的 ...

  6. Mysql 创建权限较小的用户(只对特定数据库有操作权限)

    项目开发过程中,因为root的权限太大,可能对其他数据库造成修改.故创建一权限较小的用户,使其只能对特定的数据库操作,以保证数据安全. 主要语句如下: grant all on bos19.* to ...

  7. zabbix监控sockets连接数

    配置zabbix客户端配置文件 vim /etc/zabbix/zabbix_agentd.conf 添加  Include=/etc/zabbix/zabbix_agentd.d/ 添加脚本对soc ...

  8. ListView知识点汇总(9.2)

    1 最为基础的listview: http://www.cnblogs.com/allin/archive/2010/05/11/1732200.html http://blog.csdn.net/h ...

  9. const readonly

    静态常量(compile-time constants)静态常量是指编译器在编译时候会对常量进行解析,并将常量的值替换成初始化的那个值. 动态常量(runtime constants)而动态常量的值则 ...

  10. Android开发之Conversion to Dalvik format failed问题解决

    [2014-4-21 21:28:06 - Dex Loader] Unable to execute dex: java.nio.BufferOverflowException. Check the ...