⑴ python的特点有哪些
Python语言的特点:
①Python语法优雅,程序编码简单易读。
②Python易上手,通过简单的操作就能让你写的程序运行。Python非常适合用来做原型开发或其他专门的编码任务,同时又不用为了维护而烦恼。
③Python拥有大量的标准库来支持一般的编码任务,例如连接网络服务器、用正则表达式搜索文字、读取和修改文件等。
④Python的交互模式可以很方便地检测代码片段。同时Python其实也自带了一个叫作IDLE的集成开发环境,初学者可以利用它方便地创建、运行、测试和调试Python程序。
⑤Python通过添加新的模块可以很容易进行扩展,这些模块可以是通过类似C或C++等编译型语言执行应用的。注意,Python是解释型脚本语言。
⑥Python也可以被嵌入应用中来提供一个可编程的接口。
⑦Python可以在任何环境运行,包括Mac OS
X,Windows,linux和Unix,通过非官方的构建,也可以在android和ios上运行。
⑧Python双重免费。首先下载和使用或是在你的应用中内置Python是完全免费的。其次Python可以被自由修改然后再发布,因为语言是完全开源的。
⑵ 【Python基础】python基本语法规则有哪些
1.关于编码:
默认情况下,Python 3 源码文件以 UTF-8 编码,所有字符串都是 unicode 字符串。 当然你也可以为源码文件指定不同的编码:
# -*- coding: cp-1252 -*-
2.标识符:
第一个字符必须是字母表中字母或下划线,其他的部分由字母、数字和下划线组成。
标识符对大小写敏感。
在 Python 3 中,可以用中文作为变量名,非 ASCII 标识符也是允许的了。
3.保留字:
保留字即关键字,我们不能把它们用作任何标识符名称。
Python 的标准库提供了一个 keyword 模块,可以输出当前版本的所有关键字:
代码:
import keyword
keyword.kwlist
结果:
['False', 'None', 'True', 'and', 'as', 'assert', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'nonlocal', 'not', 'or', 'pass', 'raise', 'return', 'try', 'while', 'with', 'yield']
4.关于注释:
单行注释以 # 开头
多行注释可以用多个 # 号,还有 ''' 和 """
5.缩进与多行语句:
Python最具特色的就是使用缩进来表示代码块,不需要使用大括号 {} 。
缩进的空格数是可变的,但是同一个代码块的语句必须包含相同的缩进空格数
Python 通常是一行写完一条语句,但如果语句很长,我们可以使用反斜杠(\)来实现多行语句,例如:
代码:total = item_one + \
item_two + \
item_three
在 [], {}, 或 () 中的多行语句,不需要使用反斜杠(\),例如:
代码:total = ['item_one', 'item_two', 'item_three',
'item_four', 'item_five']
6.数字(Number)类型:
Python中数字有四种类型:整数、布尔型、浮点数和复数。
int (整数), 如 1, 只有一种整数类型 int,表示为长整型,没有 python2 中的 Long。
bool (布尔), 如 True。
float (浮点数), 如 1.23、3E-2
complex (复数), 如 1 + 2j、 1.1 + 2.2j
7.字符串:
python中单引号和双引号使用完全相同。
使用三引号('''或""")可以指定一个多行字符串。
转义符 '\'
反斜杠可以用来转义,使用r可以让反斜杠不发生转义。。 如 r"this is a line with \n" 则\n会显示,并不是换行。
按字面意义级联字符串,如"this " "is " "string"会被自动转换为this is string。
字符串可以用 + 运算符连接在一起,用 * 运算符重复。
Python 中的字符串有两种索引方式,从左往右以 0 开始,从右往左以 -1 开始。
Python中的字符串不能改变。
Python 没有单独的字符类型,一个字符就是长度为 1 的字符串。
字符串的截取的语法格式如下:变量[头下标:尾下标:步长]
代码示例:
#!/usr/bin/python3
str='Runoob'
print(str) # 输出字符串
print(str[0:-1]) # 输出第一个到倒数第二个的所有字符
print(str[0]) # 输出字符串第一个字符
print(str[2:5]) # 输出从第三个开始到第五个的字符
print(str[2:]) # 输出从第三个开始后的所有字符
print(str * 2) # 输出字符串两次
print(str + '你好') # 连接字符串
print('hello\nrunoob') # 使用反斜杠(\)+n转义特殊字符
print(r'hello\nrunoob') # 在字符串前面添加一个 r,表示原始字符串,不会发生转义
8.空行:
函数之间或类的方法之间用空行分隔,表示一段新的代码的开始。类和函数入口之间也用一行空行分隔,以突出函数入口的开始。
空行与代码缩进不同,空行并不是Python语法的一部分。书写时不插入空行,Python解释器运行也不会出错。但是空行的作用在于分隔两段不同功能或含义的代码,便于日后代码的维护或重构。
记住:空行也是程序代码的一部分。
9.等待用户输入input:
执行下面的程序在按回车键后就会等待用户输入:
input("\n\n按下 enter 键后退出。")
以上代码中 ,"\n\n"在结果输出前会输出两个新的空行。一旦用户按下 enter 键时,程序将退出。
10.同一行显示多条语句:
Python可以在同一行中使用多条语句,语句之间使用分号(;)分割,以下是一个简单的实例:
import sys; x = 'runoob'; sys.stdout.write(x + '\n')
11.代码组:
缩进相同的一组语句构成一个代码块,我们称之代码组。
像if、while、def和class这样的复合语句,首行以关键字开始,以冒号( : )结束,该行之后的一行或多行代码构成代码组。
我们将首行及后面的代码组称为一个子句(clause)。
12.Print输出:
Print 输出
print 默认输出是换行的,如果要实现不换行需要在变量末尾加上 end="":
代码:
x="a"
y="b"
# 换行输出
print( x )
print( y )
# 不换行输出
print( x, end=" " )
print( y, end=" " )
13.import 与 from...import
在 python 用 import 或者 from...import 来导入相应的模块。
将整个模块(somemole)导入,格式为: import somemole
从某个模块中导入某个函数,格式为: from somemole import somefunction
从某个模块中导入多个函数,格式为: from somemole import firstfunc, secondfunc, thirdfunc
将某个模块中的全部函数导入,格式为: from somemole import *
代码:
导入 sys 模块
import sys
print ('命令行参数为:')
for i in sys.argv:
print (i)
print ('\n python 路径为',sys.path)
导入 sys 模块的 argv,path 成员
from sys import argv,path # 导入特定的成员
print('path:',path) # 因为已经导入path成员,所以此处引用时不需要加sys.path
14.命令行参数:
很多程序可以执行一些操作来查看一些基本信息,Python可以使用-h参数查看各参数帮助信息:
代码:
$ python -h
usage: python [option] ... [-c cmd | -m mod | file | -] [arg] ...
Options and arguments (and corresponding environment variables):
-c cmd : program passed in as string (terminates option list)
-d : debug output from parser (also PYTHONDEBUG=x)
-E : ignore environment variables (such as PYTHONPATH)
-h : print this help message and exit
[ etc. ]
15.一个有用的函数:help( )
调用 python 的 help() 函数可以打印输出一个函数的文档字符串:
# 如下实例,查看 max 内置函数的参数列表和规范的文档
>>> help(max)
……显示帮助信息…… 按下 : q 两个按键即退出说明文档
如果仅仅想得到文档字符串:
>>> print(max.__doc__) # 注意,doc的前后分别是两个下划线
max(iterable, *[, default=obj, key=func]) -> value
max(arg1, arg2, *args, *[, key=func]) -> value
With a single iterable argument, return its biggest item. The
default keyword-only argument specifies an object to return if
the provided iterable is empty.
With two or more arguments, return the largest argument.
⑶ python基础语法知识询问
由于Python语言的简洁、易读以及可扩展性,在国外用Python做科学计算的研究机构日益增多,一些知名大学已经采用Python教导学生程序设计的首选编程语言。例如麻省理工学院的计算机科学及编程导论课程就使用Python语言讲授。
想必大家还想了解到更多知识技能,接下来就跟千锋武汉Python培训的老师就来分享一下Python基础语法的四大知识点,希望大家会喜欢。
一、标识符
a)概念:对变量,常量,函数,类等对象起的名字。严格区分大小写。
b)标识符命名规则:
语法要求(硬性):
i.必须以字母或者下划线开头(支持中文,中文也是字符)
ii.必须以字母,数字,下划线组成
iii.区分大小写
iv.不能和关键字和内置函数名同名。
代码规范(弹性):
v.变量名全部小写,常量全部大写(代码规范,不是语法要求)
vi.类名用大写驼峰(代码规范)、
vii.模块和包名用小写
二、关键字
a)Import keyword keyword.kwlist 查看所有关键字
三、注释
a)单行:#开头
b)多行:每行使用#
c)文档注释:使用三个引号包括起来(””” XXX “””),这种注释专门为函数或者类形成说明文档。注释必须跟在定义体下面,不能再任意位置。
四、代码头两行
a)#!/usr/bin/env Python:指定运行代码的解释器,linux专用,windows不需要。在linux下添加改行,则可以使用./xxx.py执行。如果使用Python xxx.py则不需要改行。
b)# -*- coding:utf-8 -*- :代码的编码方式
⑷ python自学菜鸟 expected an indented block什么意思
1、不像其他语言(C++, java 等等),python的是用缩进来识别语法逻辑块的(i.e. if, while, for, def 等)。同一个if逻辑块下面的语句必须要有相同的缩进,否则python解析器怎么知道if块控制哪些语句?
2、所谓缩进,就是每一行开头的空白。这个空白可以由多个空格或者制表符组成。python下面你怎么缩进都可以,比如3个空格,2个tab,这样都是合法的。但是同一个逻辑块下面必须用一样的。一般来说,我们推荐2空格缩进。(而不是用tab缩进,原因是tab在不同编辑器下显示的空白长度不一致会带来很多问题)
3、关于Google。搜索出来第一个答案就是Why do I get "expected an indented block" when I try to run my Python script? ,应该耐心的看完答案哦。遇到不懂的,比如不懂什么是“indent 缩进”,应该继续Google。一层层搜索下去。初期确实会遇到很大困难吧。加油
4、最关键的是!!!!!!!!!!!!!!楼主mm你应该换个漂亮的正面头像啊!你看这个mm,问题比你奇葩多了,下面的回答不但没有人责问“怎么不会Google呢?”“这么简单的问题也能上知乎”?反而吸引来一堆人来回答还被顶上了知乎推荐:自学 Python,现在出现个情况,该怎么办?
所以我觉得女孩子学python的关键是长得好看,至少头像好看啊!然后问问题的时候要像那个妹子一样卖点萌。比如你这个问题描述应该这么写:
人家学python才第3天嘛~~~~ 遇到这个问题好讨厌哦~~~ 各位gg能不能用简单的语言跟小女子介绍一下什么是缩进好不好?么么哒~
⑸ python中的try的用法
try语句是python里面的控制语句,与except,finally配合使用处理在程序运行中出现的异常情况。
try的工作原理是:当开始一个try语句后,python就在当前程序的上下文中作标记,这样当异常出现时就可以回到这里,try子句先执行,接下来会发生什么依赖于执行时是否出现异常。
假如在读一个文件的时候,希望在无论异常发生与否的情况下都关闭文件,该怎么做呢?这可以使用finally块来完成。注意,在一个try块下,可以同时使用except从句和finally块。如果要同时使用它们的话,需要把一个嵌入另外一个。
(5)python有哪些奇葩语法扩展阅读:
python的基础语法
Python的设计目标之一是让代码具备高度的可阅读性。它设计时尽量使用其它语言经常使用的标点符号和英文单字,让代码看起来整洁美观。
python的用法
Python可以以交互模式运行,比如主流操作系统Unix/Linux、Mac、Windows都可以直接在命令模式下直接运行Python交互环境。直接下达操作指令即可实现交互操作。
一个和其他大多数语言(如C)的区别就是,一个模块的界限,完全是由每行的首字符在这一行的位置来决定的(而C语言是用一对花括号{}来明确的定出模块的边界的,与字符的位置毫无关系)。
⑹ python i++ ,python有这种语法吗类似C++和java的 i++。整数自增
python并不支持i++这种整数自增的语法。如果想要达到类似的效果,可以使用如下语句。
首先,如果您想要使整数i,每次增加1,则有语句 i += 1;同理,整数 i 每次增加2,则有语句 i += 2,以此类推。如果想要使整数i,每次减少1,则有语句 i -= 1,;同理,整数 i 每次减少2,则有语句 i -= 2,以此类推。
拓展资料:
python软件有如下优点:
1. 简单,Python的语法非常优雅,甚至没有像其他语言的大括号,分号等特殊符号,代表了一种极简主义的设计思想。阅读Python程序像是在读英语。
2. 易学,Python入手非常快,学习曲线非常低,可以直接通过命令行交互环境来学习Python编程。
3. 开源,Python的所有内容都是免费开源的,这意味着你不需要花一分钱就可以免费使用Python,并且你可以自由地发布这个软件的拷贝、阅读它的源代码、对它做改动、把它的一部分用于新的自由软件中。
4. 自动内存管理,如果你了解C语言、C++语言你就会知道内存管理给你带来很大麻烦,程序非常容易出现内存方面的漏洞。但是在Python中内存管理是自动完成的,你可以专注于程序本身。
5. 可以移植,由于Python是开源的,它已经被移植到了大多数平台下面,例如:Windows、MacOS、Linux、Andorid、iOS等等。
6. 解释性,大多数计算机编程语言都是编译型的,在运行之前需要将源码编译为操作系统可以执行的二进制格式(0110格式的),这样大型项目编译过程非常消耗时间,而Python语言写的程序不需要编译成二进制代码。你可以直接从源代码运行程序。在计算机内部,Python解释器把源代码转换成称为字节码的中间形式,然后再把它翻译成计算机使用的机器语言并运行。
7. 面向对象,Python既支持面向过程,又支持面向对象,这样编程就更加灵活。
8. 可扩展,Python除了使用Python本身编写外,还可以混合使用像C语言、Java语言等编写。
9. 丰富的第三方库,Python具有本身有丰富而且强大的库,而且由于Python的开源特性,第三方库也非常多,例如:在web开发、爬虫、科学计算等等。
⑺ 那些奇葩python模块怎么交叉编译呀
先运行以下几步:
[plain] view plain
tar zxf sqlite-amalgamation-3.5.6.tar.gz
cd sqlite-3.5.6
./configure --host=arm-linux --prefix=/usr/local/arm/3.3.2 --enable-shared --disable-readline --disable-dynamic-extensions
以上是把sqlite解压缩,然后做一些配置,这里,我希望sqlite到时候安装到/usr/local/arm/3.3.2里,要生成动态链接库,不要readline,不要sqlite的动态扩展。
然后编辑Makefile,把CFLAG和CXXFLAG中的-g去掉,我们不用debug sqlite。
接下来就可以编译和安装sqlite了:
[plain] view plain
make
make install
这一步就完成了sqlite的编译和安装了。
⑻ Python|range函数用法完全解读
迭代器是 23 种设计模式中最常用的一种(之一),在 Python 中随处可见它的身影,我们经常用到它,但是却不一定意识到它的存在。在关于迭代器的系列文章中(链接见文末),我至少提到了 23 种生成迭代器的方法。有些方法是专门用于生成迭代器的,还有一些方法则是为了解决别的问题而“暗中”使用到迭代器。
在系统学习迭代器之前,我一直以为 range() 方法也是用于生成迭代器的,现在却突然发现,它生成的只是可迭代对象,而并不是迭代器! (PS:Python2 中 range() 生成的是列表,本文基于Python3,生成的是可迭代对象)
于是,我有了这样的疑问:为什么 range() 不生成迭代器呢?在查找答案的过程中,我发现自己对 range 类型的认识存在一些误区。因此,本文将和大家全面地认识一下 range ,期待与你共同学习进步。
1、range() 是什么?
它的语法:range(start, stop [,step]) ;start 指的是计数起始值,默认是 0;stop 指的是计数结束值,但不包括 stop ;step 是步长,默认为 1,不可以为 0 。range() 方法生成一段左闭右开的整数范围。
对于 range() 函数,有几个注意点:(1)它表示的是左闭右开区间;(2)它接收的参数必须是整数,可以是负数,但不能是浮点数等其它类型;(3)它是不可变的序列类型,可以进行判断元素、查找元素、切片等操作,但不能修改元素;(4)它是可迭代对象,却不是迭代器。
2、 为什么range()不生产迭代器?
可以获得迭代器的内置方法很多,例如 zip() 、enumerate()、map()、filter() 和 reversed() 等等,但是像 range() 这样仅仅得到的是可迭代对象的方法就绝无仅有了(若有反例,欢迎告知)。这就是我存在知识误区的地方。
在 for-循环 遍历时,可迭代对象与迭代器的性能是一样的,即它们都是惰性求值的,在空间复杂度与时间复杂度上并无差异。我曾概括过两者的差别是“一同两不同”:相同的是都可惰性迭代,不同的是可迭代对象不支持自遍历(即next()方法),而迭代器本身不支持切片(即 getitem () 方法)。
虽然有这些差别,但很难得出结论说它们哪个更优。现在微妙之处就在于,为什么给 5 种内置方法都设计了迭代器,偏偏给 range() 方法设计的就是可迭代对象呢?把它们都统一起来,不是更好么?
事实上,Pyhton 为了规范性就干过不少这种事,例如,Python2 中有 range() 和 xrange() 两种方法,而 Python3 就干掉了其中一种,还用了“李代桃僵”法。为什么不更规范点,令 range() 生成的是迭代器呢?
关于这个问题,我没找到官方解释,以下纯属个人观点 。
zip() 等方法都需要接收确定的可迭代对象的参数,是对它们的一种再加工的过程,因此也希望马上产出确定的结果来,所以 Python 开发者就设计了这个结果是迭代器。这样还有一个好处,即当作为参数的可迭代对象发生变化的时候,作为结果的迭代器因为是消耗型的,不会被错误地使用。
而 range() 方法就不同了,它接收的参数不是可迭代对象,本身是一种初次加工的过程,所以设计它为可迭代对象,既可以直接使用,也可以用于其它再加工用途。例如,zip() 等方法就完全可以接收 range 类型的参数。
也就是说,range() 方法作为一种初级生产者,它生产的原料本身就有很大用途,早早把它变为迭代器的话,无疑是一种画蛇添足的行为。
对于这种解读,你是否觉得有道理呢?欢迎就这个话题与我探讨。
3、range 类型是什么?
以上是我对“为什么range()不产生迭代器”的一种解答。顺着这个思路,我研究了一下它产生的 range 对象,一研究就发现,这个 range 对象也并不简单。
首先奇怪的一点就是,它竟然是不可变序列!我从未注意过这一点。虽然说,我从未想过修改 range() 的值,但这一不可修改的特性还是令我惊讶。
翻看文档,官方是这样明确划分的——有三种基本的序列类型:列表、元组和范围(range)对象。(There are three basic sequence types: lists, tuples, and range objects.)
这我倒一直没注意,原来 range 类型居然跟列表和元组是一样地位的基础序列!我一直记挂着字符串是不可变的序列类型,不曾想,这里还有一位不可变的序列类型呢。
那 range 序列跟其它序列类型有什么差异呢?
普通序列都支持的操作有 12 种。range 序列只支持其中的 10 种,不支持进行加法拼接与乘法重复。
那么问题来了:同样是不可变序列,为什么字符串和元组就支持上述两种操作,而偏偏 range 序列不支持呢?虽然不能直接修改不可变序列,但我们可以将它们拷贝到新的序列上进行操作啊,为何 range 对象连这都不支持呢?
且看官方文档的解释:
…e to the fact that range objects can only represent sequences that follow a strict pattern and repetition and concatenation will usually violate that pattern.
原因是 range 对象仅仅表示一个遵循着严格模式的序列,而重复与拼接通常会破坏这种模式…
问题的关键就在于 range 序列的 pattern,仔细想想,其实它表示的就是一个等差数列啊(喵,高中数学知识没忘…),拼接两个等差数列,或者重复拼接一个等差数列,想想确实不妥,这就是为啥 range 类型不支持这两个操作的原因了。由此推论,其它修改动作也会破坏等差数列结构,所以统统不给修改就是了。
4、小结
回顾全文,我得到了两个偏冷门的结论:range 是可迭代对象而不是迭代器;range 对象是不可变的等差序列。
若单纯看结论的话,你也许没有感触,或许还会说这没啥了不得啊。但如果我追问,为什么 range 不是迭代器呢,为什么 range 是不可变序列呢?对这俩问题,你是否还能答出个自圆其说的设计思想呢?(PS:我决定了,若有机会面试别人,我必要问这两个问题的嘿~)
由于 range 对象这细微而有意思的特性,我觉得这篇文章写得值了。本文是作为迭代器系列文章的一篇来写的,所以对于迭代器的基础知识介绍不多,另外,还有一种特殊的迭代器也值得单独成文,那就是生成器了。