一、        Python概述

1、python是一门面向对象,解释型的脚本语言。语法简洁,编写效率高,但是执行(底层运行)效率低(总的来说解释语言执行效率低于编译语言)。

注意:本博客所有的代码都是按照Python3的标准创建的。

2、主要的语言特点是:任何的语句可以独立存在。并且代码块是以(:)开始的,注意每个语句的缩进空格(缩进格式决定语句的包含关系和执行顺序),在python里面缩进空格相当于java里面的“{ }”,并且没有一个明确的规定说要求几个空格,一般如果本句被上一句包含或者是上个语句的子句时,本句的会距上句缩进4个空格或者一个tab键(格式如下)

以下代码将会执行错误:

#!/usr/bin/python

# -*- coding: UTF-8 -*-

# 文件名:test.py

if True:

print "Answer"

print "True"

else:

print "Answer"

# 没有严格缩进,在执行时会报错

print "False"

执行以上代码,会出现如下错误提醒:

$ python test.py

File "test.py", line 5

if True:

^

IndentationError: unexpected indent

在 Python 的代码块中必须使用相同数目的行首缩进空格数。

3、python的基础语法与java,shell脚本都有很多相似之处,可以参照这两种语言进行学习。

二、python文件的注释,声明,

1.python文件的首句声明和shell文件的声明相似,"#!"解释器路径

#!/usr/bin/python

2.注释

2.1单行注释,以”#“开头,注意:在python里引号也是成对存在的

# 单行注释、python3的输出语句,字符串单引号括起来

print('hello python!')

# 单行注释、python3的输出语句,字符串双引号括起来

print("hello python!")

2.2多行注释,用三个单引号('''  ''')或者双引号("""  """)括起来,注意:引号要成对存在

"""

python里面 类的构造方法能不能用关键字传参,

在python里面不能有++,--,但是在java中可以,shell里面用let var_name ++

这是以回车结尾

"""

print('人生苦短,好好学习python!', end='\n')

'''

这是python3的输出函数的基本用法

print(self, *args, sep=' ', end='\n', file=None)

可以改变里面的任意参数,end表示输出后以什么结尾

*args:表示不定长参数,后面会详细介绍

'''

print('人生苦短,好好学习python!', end='^_^')

print('人生苦短,好好学习python!', end='^_^')

输出结果:

人生苦短,好好学习python!

人生苦短,好好学习python!^_^人生苦短,好好学习python!^_^

注意:在书写字符串时会受到一些特殊字符('," 等)的影响,用三个单引号或者双引号不失为一个好的解决方法。同时换行输出也是。

下面会报错:

print('let't go')

下面会正常输出:

print('''let's go!''')

下面会报错:

print('---------------')

print('

春眠不觉晓

处处蚊子咬

梦来春雨声

夜里明月笑

')

下面是换行输出:

#输出时空格换行等都不会忽略,就连空行和空格都

print('---------------')

print('''

春眠不觉晓

处处蚊子咬

梦来春雨声

夜里明月笑

''')

print('---------------')

结果如下:

---------------

春眠不觉晓

处处蚊子咬

梦来春雨声

夜里明月笑

---------------

Process finished with exit code 0

3.空格

函数之间或类的方法之间用空行分隔,表示一段新的代码的开始。类和函数入口之间也用一行空行分隔,以突出函数入口的开始。

空行与代码缩进不同,空行并不是Python语法的一部分。书写时不插入空行,Python解释器运行也不会出错。但是空行的作用在于分隔两段不同功能或含义的代码,便于日后代码的维护或重构。

记住:空行也是程序代码的一部分。

三、变量

3.1变量的声明

python的变量定义和shell命名一样,都可以直接定义

3.1.1对单个变量赋值

variable_name = value

3.1.2对多个变量赋予同一个值

variable_name1=variable_name2=variable_name3……=value

3.1.2对多个变量赋予不一样的值

variable_name1,variable_name2,variable_name3……=value1,value2,value3……

3.2变量名的命名规则

1、字母,数字,下划线组成

2、数字不能开头

3、严格区分字母大小写

4、不能直接用保留字或者关键字(都是小写的)

3.3变量的作用域

3.3.1 变量作用域(scope)在Python中是一个容易掉坑的地方。

Python的作用域一共有4中,分别是:

L (Local) 局部作用域:定义在函数中的变量

E (Enclosing) 闭包函数外的函数中

G (Global) 全局作用域

B (Built-in) 内建作用域

以 L --> E --> G -->B 的规则查找,即:在局部找不到,便会去局部外的局部找(例如闭包),再找不到就会去全局找,再者去内建中找。

#全局变量

global_variable = 123

def function_name ():

glc = 345 #局部变量

print('函数中调用全局变量:',global_variable)

return glc

print('全局变量:',global_variable)

# print(glc)局部变量不能在本函数外被调用

print(function_name())#局部变量只能在本函数中调用

结果如下:

全局变量: 123

函数中调用全局变量: 123

345

3.3.2 闭包Closure

闭包的定义:如果在一个内部函数里,对在外部函数内(但不是在全局作用域)的变量进行引用,那么内部函数就被认为是闭包(closure)。

这个概念在javascript里面具有很好的体现。

函数嵌套/闭包中的作用域:

def external():

global a #声明一个全局变量

a = 200

print ('本地函数调用:',a)

b = 100#创建外部函数变量

#定义内部函数

def internal():

# nonlocal b

print ('调用外部函数的变量:',b)

b = 200#给外部函数的变量修改值

return b

internal()#执行内部函数

print ('输出外部函数变量的值:',b)

print ('外部函数的结果:',external())

运行结果:

UnboundLocalError: local variable 'b' referenced before assignment

会报错- 引用在赋值之前,Python3有个关键字nonlocal可以解决这个问题,但在Python2中还是不要尝试修改闭包中的变量。

关于闭包中还有一个坑:

from functools import wraps#导入模块(导包)

def wrapper(log):

def external(F):

@wraps(F)

def internal(**kw):

if False:

log = 'modified'

print( log)

return internal

return external

@wrapper('first')

def abc():

pass

print (abc())

也会出现 引用在赋值之前 的错误,原因是解释器探测到了 if False 中的重新赋值,所以不会去闭包的外部函数(Enclosing)中找变量,但 if Flase 不成立没有执行,所以便会出现此错误。除非你还需要else: log='var' 或者 if True 但这样添加逻辑语句就没了意义,所以尽量不要修改闭包中的变量。

好像用常规的方法无法让闭包实现计数器的功能,因为在内部进行 count +=1 便会出现 引用在赋值之前 的错误,解决办法:(或Py3环境下的 nonlocal 关键字)

def counter(start):

count =[start]

def internal():

count[0] += 1

return count[0]

return internal

count = counter(0)

for n in range(10):

print (count())

# 1,2,3,4,5,6,7,8,9,10

count = counter(0)

print (count())

3.3.3

locals() 和 globals()

globals()

global 和 globals() 是不同的,global 是关键字用来声明一个局部变量为全局变量。globals() 和 locals() 提供了基于字典的访问全局和局部变量的方式

比如:如果函数1内需要定义一个局部变量,名字另一个函数2相同,但又要在函数1内引用这个函数2。

def var():

pass

def f2():

var = 'Just a String'

f1 = globals()['var']

print (var)

return (type(f1))

print (f2())

# Just a String

#

locals()

如果你使用过Python的Web框架,那么你一定经历过需要把一个视图函数内很多的局部变量传递给模板引擎,然后作用在HTML上。虽然你可以有一些更聪明的做法,还你是仍想一次传递很多变量。先不用了解这些语法是怎么来的,用做什么,只需要大致了解locals()是什么。

可以看到,locals()把局部变量都给打包一起扔去了。

@app.route('/')

def view():

user = User.query.all()

article = Article.query.all()

ip = request.environ.get('HTTP_X_REAL_IP',request.remote_addr)

s = 'Just a String'

return render_template('index.html', user=user,article = article, ip=ip, s=s)

#或者 return render_template('index.html', **locals())

python中var是什么变量_一、 Python概述、变量相关推荐

  1. python中numpy数组的合并_基于Python中numpy数组的合并实例讲解

    基于Python中numpy数组的合并实例讲解 Python中numpy数组的合并有很多方法,如 - np.append() - np.concatenate() - np.stack() - np. ...

  2. python中for语句的使用_对Python中for复合语句的使用示例讲解

    当Python中用到双重for循环设计的时候我一般会使用循环的嵌套,但是在Python中其实还存在另一种技巧--for复合语句. 简单写一个小程序,用于延时循环嵌套功能如下: #!/usr/bin/p ...

  3. python中的class怎么用_对python 中class与变量的使用方法详解

    python中的变量定义是很灵活的,很容易搞混淆,特别是对于class的变量的定义,如何定义使用类里的变量是我们维护代码和保证代码稳定性的关键. #!/usr/bin/python #encoding ...

  4. python中矩阵的表示方法_关于Python表示矩阵的方法详解

    这篇文章主要介绍了Python表示矩阵的方法,结合具体实例形式分析了Python表示矩阵的方法与相关操作注意事项,需要的朋友可以参考下 本文实例讲述了Python表示矩阵的方法.分享给大家供大家参考, ...

  5. python中list作为函数参数_在python中list作函数形参,防止被实参修改的实现方法

    0.摘要 我们将一个list传入函数后,函数内部对实参修改后,形参也会随之改变.本文将主要介绍这种错误的现象.原因和解决方法. 1.代码示例 def fun(inner_lst): inner_lst ...

  6. python中使用函数编程的意义_总结Python编程中函数的使用要点

    为何使用函数 最大化代码的重用和最小化代码冗余 流程的分解 编写函数 >>def语句 在Python中创建一个函数是通过def关键字进行的,def语句将创建一个函数对象并将其赋值给一个变量 ...

  7. python中 和is的区别_关于python中的is和==的区别

    在Python中,对象之间的比较.您可以使用= =或.但它们之间的区别是什么?比较两个实例对象是否完全相同,无论他们是同一个对象,以及他们是否占据相同的内存地址.莱布尼兹曾经说过:\u201C世界上没 ...

  8. 关于python中lambda函数的描述_关于Python中的lambda函数

    lambda是Python编程语言中使用频率较高的一个关键字.那么,什么是lambda?它有哪些用法?网上的文章汗牛充栋,可是把这个讲透的文章却不多.这里,我们通过阅读各方资料,总结了关于Python ...

  9. python中空格字符是什么_关于Python中空格字符串处理的技巧总结

    前言 大家应该都知道字符串处理,是任何语言最常用到的. 其中就经常会碰到,对字符串中的空格处理,比如:去除前后空格,去除全部空格,或者以空格为分隔符来处理. 好在Python中字符串有很多方法,比如l ...

  10. python中使用grpc方法示例_在Python中使用gRPC的方法示例

    本文介绍了在Python中使用gRPC的方法示例,分享给大家,具体如下: 使用Protocol Buffers的跨平台RPC系统. 安装 使用 pip pip install grpcio pip i ...

最新文章

  1. c语言递归求五阶行列式源代码,久游堂怎么样 -官网
  2. HDU 1021 Fibonacci Again 简单数学题
  3. QT【001】- 基础写在前面的话
  4. BT下载原理学习简介
  5. java new Date()得到的时间和系统时间不一样
  6. macbook proc如何升级到10.14.3
  7. HTMLUnit爬虫模拟登录Linkedin
  8. html页面载入完毕返回顶部,HTMl页面中返回顶部如何实现 HTMl页面中返回顶部实现代码...
  9. MPC(模型预测控制)控制小车沿轨迹移动——C++实现
  10. 数学建模与数学实验3.4习题1
  11. Microsoft.Windows.Controls.Ribbon.RibbonWindow 碰到 AvalonDock出现的诡异现象
  12. java jsessionid_关于JSESSIONID
  13. inputBox 与 Application.inputBox 的用法与区别。
  14. debian9.6安装virtualbox
  15. iphone 自定义铃声制作
  16. 如果因为溢出导致了结果为负,那么逻辑上真正的结果必然为正
  17. EtherCAT运动控制器在数控加工手轮随动中的应用之C++
  18. 案例|山东省中医院基于ZABBIX构建网络设备监控预警平台
  19. 海信 Vidda Z100 评测
  20. 产业洞察 | 软件定义新IT,深信服为数字化转型架设新设施

热门文章

  1. 总结:我在大学三年是如何学习编程的
  2. 计算机毕业设计开题报告如何答辩---毕设开题答辩稿
  3. 监控摄像机选型攻略之技术类型选用
  4. 2-6 CAD基础 移动(move)
  5. 女人有一个响亮的名字---英雄
  6. Vue组件传值存在的弊端-Vuex状态管理
  7. Elasticsearch 查询之 多字符串多字段查询
  8. 用 Node.js 写微信小游戏辅助
  9. HTML 样式-CSS
  10. mac系统使用cmake和ninja快速安装llvm