一、 Python概述、变量
一、 Python概述
1、python是一门面向对象,解释型的脚本语言。语法简洁,编写效率高,但是执行(底层运行)效率低(总的来说解释语言执行效率低于编译语言)。
注意:本博客所有的代码都是按照Python3的标准创建的。
2、主要的语言特点是:任何的语句可以独立存在。并且代码块是以(:)开始的,注意每个语句的缩进空格(缩进格式决定语句的包含关系和执行顺序),在python里面缩进空格相当于java里面的“{ }”,并且没有一个明确的规定说要求几个空格,一般如果本句被上一句包含或者是上个语句的子句时,本句的会距上句缩进4个空格或者一个tab键(格式如下)
以下代码将会执行错误:
#!/usr/bin/python
# -*- coding: UTF-8 -*-
# 文件名:test.pyif True: print "Answer" print "True" else: print "Answer" # 没有严格缩进,在执行时会报错 print "False"
执行以上代码,会出现如下错误提醒:
$ python test.py File "test.py", line 5if 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 # <type 'function'>
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())
转载于:https://www.cnblogs.com/ljw-cnqh/p/7004458.html
一、 Python概述、变量相关推荐
- python中var是什么变量_一、 Python概述、变量
一. Python概述 1.python是一门面向对象,解释型的脚本语言.语法简洁,编写效率高,但是执行(底层运行)效率低(总的来说解释语言执行效率低于编译语言). 注意:本博客所有的代 ...
- python的变量和简单的数据类型
决定学习python这门语言了,本人资质愚钝,只会把学到的东西记录下来,供自己查漏补缺,也可以分享给和我一样正在学习python语言的人,若在记录中存在什么错误,希望多多批评指正,谢谢. Python ...
- 1.0、Python概述
目录 1.Python语言的发展史 2.Python语言的特点 3.Python下载与安装 4.开始使用python 1.Python语言的发展史 Python的作者,Guido von R ...
- Python入门到精通【精品】第一章 - Python概述
Python入门到精通[精品]第一章 - Python概述 1. Python语言历史 2. Python语言特点 3. Python的下载和安装 3.1. Python的下载 3.2. Python ...
- 第一章Python概述
第一章Python概述 一.基本概念 1.IDLE:(Integrated Development and Learning Environment)集成开发和学习环境,是Python的集成开发环境. ...
- 第三章 嵌入式Python概述(三)
文章目录 第三章 嵌入式Python概述(三) 使用 SQL 使用Globals 一起使用 ObjectScript 和 Python 创建混合 InterSystems IRIS 类 在 Pytho ...
- python函数变量的作用域_python函数变量的作用域
python 2.7 变量作用域的疑问 函数a()定义u为全局变量,并赋值为0 函数b()中,设定没有声明u的访问方式 在函数中定义和修改全局变量,需要使用global关键字.但访问全局变量(不修改它 ...
- 我的全栈之路-Python基础之Python概述与开发环境搭建
我的全栈之路-Python基础之Python概述与开发环境搭建 我的全栈之路 1.1 信息技术发展趋势 1.2 浅谈计算机系统架构 1.2.1 计算机系统架构概述 1.2.2 计算机硬件系统 1.2. ...
- python常用变量名_python基础知识整理
Python Python开发 Python语言 python基础知识整理 序言:本文简单介绍python基础知识的一些重要知识点,用于总结复习,每个知识点的具体用法会在后面的博客中一一补充程序: 一 ...
- python中变量的作用域有几种_Python中变量的作用域(variable scope)
http://www.crifan.com/summary_python_variable_effective_scope/ 解释python中变量的作用域 示例: 1.代码版 #!/usr/bin/ ...
最新文章
- NTP 时间同步流量使用过大 问题解决
- 前端开发学习笔记(二)
- Python-14-常用模块
- Laravel 源码解读:php artisan make:auth
- css设置input框长度_干货极致分享浅谈CSS属性,有趣的盒模型。网友:哎呦不错哦!...
- 字符串的原样输入输出python_Python字符串输入输出简述
- LeetCode 247. 中心对称数 II(DP)
- php 一个URL加密解密的程序
- php session的一些理解
- mac下charles使用教程
- java微信刷卡支付demo,微信刷卡支付API详解
- PyQt5 第六章 拖拽和绘画(二)
- 彷徨 | HDFS核心设计思想图
- VLC_本地播放器(C#)
- JQuery从入门到实战
- Archlinux安装yaourt
- ant Design 中使用 :globa
- 使用Python爬出王者荣耀高清皮肤图片
- IMU预积分的简单理解
- 【报告分享】2022年轻人未来恋爱白皮书-36氪后浪研究所(附下载)
热门文章
- 【Python实例第19讲】图像分割的谱聚类
- Docker系列(十)Dockerfile指令
- 线性规划 (二) 单纯形法
- jQuery对表格的操作
- ZT“老师说,如果想念一个人,就响两下他/她的手机。”
- 【转载】固态硬盘的S.M.A.R.T详解
- zabbix 3.0快速安装简介(centos 6)
- SQL Server 2005 中处理表分区问题(分区表性能和分区切换)
- 《Java核心技术卷一》读书笔记(二)
- 如何在思科交换机上配置Telnet远程登录