Python学习之路3?编程风格

语句和语法

  • #   表示注释掉的内容
  • \    续行
1 print("yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy2 yyyyyyyyyyyyyyyyyyyyyyy")
  • ;    分号:同一行放置多个语句以分号作为分割符
1 print(‘cyy‘);print(‘zzl‘)
2
3 输出结果:
4 cyy
5 zzl
  • 语句(代码块)用缩进方式体现不同的代码级别,建议用4个空格(不要用tab)
  • python文件以模块的方式组织,编写一个.py结尾的文件实际上就是写了一个模块,模块的名称也是脚本的名称
  • 首行以关键字开始,如if、while 等,以冒号结束
  • Python使用缩进来分隔代码组,同一代码组的代码行必须严格左对齐,否则会造成语法错误
  • 模块里的代码可以是一段直接执行的脚本,也可以是一些类似库函数的代码从而可由别的模块执行导入(import) 因为模块在被import的那一刻就会执行;所以模块中一般存放的都是一些可调用的代码段;

标识符

标识符是计算机语言中允许作为名字的有效字符串集合

  • 变量名只能是 字母、数字或下划线的任意组合
  • 变量名的第一个字符不能是数字(是字母或下划线(_))
  • 大小写敏感
  • 两种风格:conn_obj或ConnObj
  • 不能使用关键字,不能使用内建

专用下划线的标识符

  • _xxx:不能用from module import *导入
  • __xxx__:系统定义名字
  • __xxx:类中私有变量

下划线对于解释器来说有特殊意义,而且是内建标识符所使用符号,不建议自定义变量以下划线开头

变量的定义与赋值

变量定义方法很简单:

1 x=5
2 print(x,type(5))
3 print(x*5,type(x*5))
4
5 结果:
6 5 <class ‘int‘>
7 25 <class ‘int‘>
  • 这个操作过程就是赋值,意思把整型数字5赋值给了变量x,用等号来连接变量名和值。之后就可以在表达式中使用这个新变量了。
  • 5为内存变量存放于内存中,x为变量的引用,python为动态语言,变量及其类型均无需事先声明类型
  • 与c的区别:a=1无返回值

注意:在赋值时,值是什么数据类型,就决定了这个变量的类型,变量名引用了数值的同时也引用了它的类型。

变量命名规范

1、变量名可以包括字母、数字、下划线,但是数字不能做为开头。例如:name1是合法变量名,而1name就不可以。
2、系统关键字不能做变量名使用
3、除了下划线之个,其它符号不能做为变量名使用
4、Python的变量名是除分大小写的,例如:name和Name就是两个变量名,而非相同变量哦。

python对象

python中使用对象模型来存储数据,用来生成数据类型的工厂函数本质上是类,新建数据的结果本质是实例化一个对象

对象有三种特性

  • 身份:内存地址,可以用id()确认,id相同的就是同一个对象
  • 类型:可以用type()查看,返回值的type也是对象

python内存管理

内存管理:

变量无序指定类型

程序员无须关心内存管理

变量会自动回收

del能够直接释放内存对象(减少对象的引用计数)

解释:mem删除的则是引用,并不是100占用的这块内存地址,也不是100,删除引用以后,内存地址会自动回收

引用计数:

增加引用计数:

  • 对象被创建并将其引用赋值给变量,引用计数加1(例a=1)
  • 同一个对象的引用又赋值给其它变量,引用计数加1(例b=a)
  • 对象作为参数被函数调用,引用计数加1(例int(a)
  • 对象成为容器对象中的一个元素,引用计数加1(例list_test=[‘zzl‘,‘z‘,a])

减少引用计数:

  • a作为被函数调用的参数,在函数运行结束后,包括a在内的所有局部变量均会被销毁,引用计数减1
  • 变量被赋值给另外一个对象,原对象引用计数减1(例b=2,1这一内存对象的引用只剩a)
  • 使用del删除对象的引用,引用计数减1(例del a)
  • a作为容器list_test中的一个元素,被清除,引用计数减少(例list_test.remove(a))
  • 容器本身被销毁(例del list_test)

示例说明:

 1 增加引用计数:
 2     name = ‘yyp’  #创建内存变量yyp,将变量yyp的引用传给name,此刻yyp的引用计数为1
 3     name1 = name  #name有赋值给name1,现在yyp的引用计数增加到2
 4     def foo(name):   #作为函数调用的时候,引用计数加1
 5         pass
 6
 7 减少引用计数
 8     name1=‘sy’ #创建新的内存变量sy,将变量sy的引用传给name1,原本指向yyp的name1,此刻给了2,所以1的引用计数减少了1
 9
10     del name #删除了内存对象yyp的引用name,此刻yyp再无引用,此刻它就成了python解释器回收的目标

用数据类型的可变/不可变与内存地址相互关联起来理解:

定义:基于一个内存地址的修改,是可变类型

数字:

数字更改元素,内存地址发生变化,所以数字是不可变的数据类型

字符串:

字符串更改元素,内存地址发生变化,所以字符串是不可变的数据类型

列表:

列表元素发生改变,内存地址不变,所以列表是可变类型

元组:

元祖本身就不能修改,所以元组是不可变的数据类型

字典:

字典元素发生改变,内存地址不变,所以字典是可变类型

补充知识:

一上两种情况,实际上应该开辟两块内存空间,为什么内存空间地址相同?

因为:如果变量占用的内存地址的长度比较短,所有python解释器会缓存起来

下面写一个长的内存地址进行对比:

编写模块基本风格

  • 标题

    •  #_*_coding:utf-8_*_
       #!/usr/bin/env python
  • 文档注释
    • 既不能缺少注释,也要避免过度注释
  • 模块导入
    • import os
  • 变量定义
    • name=‘cy’
  • 类定义语句
    • class
  • 函数定义语句
    • def
  • 主程序
    • 无论当前模块是被别的模块导入还是作为脚本直接执行,都会执行这部分代码
    • if __name__ == ‘__main__‘
  • 测试代码
    • test()

eg:

 1 #!/usr/bin/python # (1)起始行
 2 #coding=utf-8                    #mod.__doc__ 引用类的文档
 3 #"this is test module" (2)模块文档(文档字符串)
 4 import sys #(3)模块导入
 5 import os
 6
 7 debug = true
 8 name = "Tom" #(4)全局变量
 9
10 class FooClass(object): #(5)类定义(若有)
11     "Foo class"
12     pass
13
14 def test():
15   "test function"
16   foo = FooClass() #将类实例化
17   if debug:
18     print ‘ran test()‘
19
20 def main(name): #(6)函数定义(若有)
21       ‘‘‘
22      test func
23      :return:
24       ‘‘‘
25     pass
26
27
28
29 if __name__ == ‘__main__‘#(7)主程序
30 test()
31 main()

时间: 2024-10-02 23:04:49

Python学习之路3?编程风格的相关文章

《Python学习之路 -- 网络编程》

在前面已经提到过,互联网的本质就是一堆协议,协议就是标准,比如全世界人通信的标准是英语,所有的计算机都学会了互联网协议,那么所有的计算机就可以按照统一的标准去收发信息完成通信了. 作为普通开发人员的我们,写的软件/程序都是处于应用层上的,然而,想要让软件接入互联网,就必须得通过传输层,也就是必须遵循TCP协议或者UDP协议.这是两个非常复杂的协议,如果遵循原生的协议,那么必然会大大降低效率,所以就有了socket抽象层的概念.socket是应用层与TCP/IP协议族通信的软件抽象层,它是一组接口

python学习之路网络编程篇(第一篇)

新课程知识的引入:python作用域 #python中无块级别作用域 if 1 == 1 : name = 'alex' print(name) for i in range(10): name = i print(name) #python中以函数为作用域 def func(): name = 'alex' print(name) #程序执行结果 # Traceback (most recent call last): # File "D:/PythonS13/Day10/С????1_pyt

python学习之路网络编程篇(第五篇)

paramiko简介 paramiko 是基于Python实现的SSH2远程安装连接,支持认证及秘钥方式.可以实现远程命令执行.文件传输.中间SSH代理等功能. paramiko安装 #!/bin/bash #install indepence package cd /data/soft wget https://www.dlitz.net/pub/dlitz/crypto/pycrypto/pycrypto-2.6.tar.gz yum -y install gcc python-devel

python学习之路网络编程篇(第五篇)-续篇

Python堡垒机实现之基础知识 一般的堡垒机必须要具备以下5个基本功能: 1.权限控制 2.执行命令 3.上传下载文件 4.远程登录 5.记录操作 权限控制 说明:根据不同的登录用户分配不同的可管理的主机组.(再细分的权限就是根据不同的用户控制可在主机上执行的命令,一般不会限制的这么严格) 思路:使用数据库创建用户表,表字段有ID.用户名.密码.所属组,再创建主机表,表字段有ID,主机IP,所属组.其中用户表中的所属组和主机表中的所属组相对应,这样就能把两张表关联起来.当用户登录的时候就可以根

Python学习之路并发编程--信号量、事件、队列及生产消费模型

1. 信号量 对于多进程来说,多个进程同时修改数据,就可能出现安全隐患,所以引入了锁,这一机制,但锁只能有一把来控制一个的开关,当你需要几把锁的时候,就可能用到信号量的概念.他是用了锁的原理,内置了一个计数器,在同一时内,只能有指定数量的进程来执行某一段被控制的代码. import time,random from multiprocessing import Process,Semaphore def singing(i,sem): ''' :param i: 随机生成20个数的值 :para

Python学习之路--网络编程

由于不同机器上的程序要通信,才产生了网络 C/S Client/Server 客户端/服务端 服务端 一直运行 等待服务别人 客户端 寻求服务的时候 才请求服务 B/S Browser/Server 浏览器/服务器 b/s架构是c/s架构的一种 实现通信上有全球唯一的MAC地址 网卡和网线 网卡 通过ip地址就能找到对应的MAC地址  ARP协议 交换机 ---- 多台机器之间的通信问题 广播风暴 网关  局域网中的机器想要访问局域网外的机器,需要通过网关访问 IP地址 和 子网掩码 按位与 

Python学习之路——强力推荐的Python学习资料

资料一:程序媛想事儿(Alexia)总结 Python是一种面向对象.直译式计算机程序设计语言.它的语法简捷和清晰,尽量使用无异义的英语单词,与其它大多数程序设计语言使用大括号不一样,它使用縮进来定义语句块.与Scheme.Ruby.Perl.Tcl等动态语言一样,Python具备垃圾回收功能,能够自动管理内存使用.它经常被当作脚本语言用于处理系统管理任务和网络程序编写,然而它也非常适合完成各种高级任务. Python上手虽然容易,但与其它任何语言一样要学好Python并非一日之功.我的Pyth

Python学习之路【第一篇】-Python简介和基础入门

1.Python简介 1.1 Python是什么 相信混迹IT界的很多朋友都知道,Python是近年来最火的一个热点,没有之一.从性质上来讲它和我们熟知的C.java.php等没有什么本质的区别,也是一种开发语言,而且已经进阶到主流的二十多种开发语言的top 5(数据源自最新的TIOBE排行榜). 来头不小啊!二十多种主流的开发语言,我该从哪一个开始呢?人生苦短,let‘s python! 1.2 Python的由来和发展趋势 Python的前世源自鼻祖“龟叔”.1989年,吉多·范罗苏姆(Gu

Python学习之路 001

Python学习之路 从今天起开始写Python学习的经历了,哈哈. 了解Python是在我想入坑Linux运维这条路开始的. 我是计算机出身有着一定编程的功底,刚开始接触Python的时候觉得Python我学习过的c,c++特性完全不一样.觉得为什么这东西会这么智能 就拿Hello World来说 C: 1 #include<stdio.h> 2 3 void main() 4 { 5 printf("Hello World"); 6 } C++: 1 #include&