Python基础02 条件、循环及其余语句

描述python

  Python是一种面向对象的解释性高级编程语言。print、import语句、赋值语句、条件语句和循环语句等都是包含对象的表达式。编程

 

一、print缓存

  print能够打印一个表达式或者多个用逗号分隔开的表达式。表达式式要么是字符串,要么就被自动转换为字符串。数据结构

  print目前实际上是一个函数:编程语言

print(dir(print()))

  print函数返回值是 NoneType?执行如下代码均会出现 error.函数

list(print('age', 2)) # TypeError: 'NoneType' object is not iterable
len(print('age', 2))  # TypeError: object of type 'NoneType' has no len()

笔记:工具

   一、print打印多个表达式,不一样表达式之间用逗号分隔,则是默认分隔符为空格。若是须要,能够经过属性 sep='_' 自定义分隔符。ui

   二、不一样表达式经过 + 链接以后的打印结果将没有空格做为分隔符。spa

   三、print默认结束字符串为换行符。若是须要,能够经过属性 end=‘ ’ 自定义空字符串为结束字符串。rest

 

二、import语句

  执行import语句,能够导入整个模块,也能够导入模块中的特定对象。

# 导入math整个模块
# import 模块1
import math
math.sqrt(10)
# from 模块1 import *,不建议使用!
from math import *
sqrt(10)
#导入math模块里面的sqrt
from math import sqrt

 

笔记:

   一、两个不一样的模块可能包含有相同名称的对象(全局变量和函数)。当这些模块被同时导入到一个模块中时,须要给其中一个模块的对象赋予一个别名。Python解释器是从上往下逐行执行代码。若是不使用别名,Python解释器执行该函数或其余指令时,将调用的是程序中最后一个模块中的对象。

from somemodule import somefunction as ...

   二、有些模块组成层次结构,即一个模快位于另外一个模块中。

 

三、赋值语句

 一、序列解包(可迭代对象解包):

  将可迭代对象解包,并将获得的值存储到一系列变量。可迭代的对象包括列表,元组,字典和字符串,与索引或者键获取可迭代对象的元素依次赋值给多个变量,序列解包并行给多个变量赋值。

num1, num2, *rest_num = [1, 2, 3, 4, 5]
print(num1, num2, rest_num)
a, *b, c = 'abc'
print(a, b, c)

笔记:

   一、* 运算符能够收集多余的值,可是带 * 的变量最终包含的老是一个列表

 二、链式赋值

  将多个变量关联到同一个值。

import math

x = y = math.sqrt(10)

# 以上代码与如下代码等价

y = math.sqrt(10)
x = y 

# 上面两个代码与如下代码不等价

y = math.sqrt(10)

x = math.sqrt(10)

 三、加强赋值

  加强赋值适用于全部的标准运算符,如 *、+、-、%、//、/等,加强赋值也适用于其余数据类型:foo *= 2

四、代码块(一组语句)

  代码块是一组语句。代码块是经过缩进代码(增长空格)来建立的。缩进代码块能够经过制表符,Python当中制表符解释为移到下一个制表位。(相邻制表位间隔8个空格符),可是标准的Python代码缩进是使用4个空格缩进代码。

  Python语言当中冒号:指出接下来的一组语句是代码块,并将代码块中的每一行代码缩进相同程度。

五、条件语句

 一、判断-布尔值、比较运算符、布尔运算符

  一、真值也称为布尔值。标准值:False,None,、各类数据类型:‘ ’,0,[],(),{} 都会被解释器视为,而其余值都被视为真(包括 Ture)

  二、类型 bool 能够装换其余值为布尔值,在Python解释器中值会被自动转换。

  三、对象相同可使用比较运算符:is;对象相等可使用比较运算符:==。is比较的是二者是不是同一个对象,因此比较的是内存地址(id是否相同),==是值比较。不可变对象,例如int,str,它会直接进行值比较。对于Python已知的对象,会调用他们的__eq__函数来比较。

  四、对象缓存机制,Python会对比较小的对象缓存,下次用到比较小的对象(,字符串)时,会去缓存区查找,若是找到,不会再开辟新的内存,而是继续把小对象的地址赋给新的值

 

"""
x = 1
y = 1
print(x is y)
print(id(x))
print(id(y))
"""
z = [1, 2]
y = [1, 2]
print(z is y)
print(z is [1, 2])

 

  五、字符串和序列的比较,字符串的比较是利用函数 ord ,按照字符串中字符排列顺序依次获取字符在ASCII码表中的顺序值并进行比较。序列的比较方式与字符串比较方式类似,可是序列包含的元素可能不是字符,其余类型的元素如元组和列表等,也是根据一样的规则对元素进行比较。

  六、布尔运算符: and、 or、 not ,只作必要计算。若是使用布尔运算符,要注意表达式的前后顺序,。如 表达式1 and 表达式2 ,只有表达式1为真才会执行表达式2,若是表达式1为假,马上返回假,而不会关心表达式2。

 二、条件语句: if、elif、else

 

students_age =[15,16,12,14,17,12,10];

for age in students_age:
    if age == 10:
        print("current student's age is :" + str(age));
    elif age == 12:
        print("the age of " + str(age) + " has two students");
    else:
        print("age is older then 12");

 

 

笔记:

  可迭代对象和迭代器,任何实现了__iter____next__()方法的对象都是迭代器,__iter__返回迭代器自身,__next__返回容器中的下一个值。range()函数返回的是一个可迭代对象,list() 函数是对象迭代器,把对象转为一个列表,返回的变量类型为列表。

 

 

六、断言语句 assert

  断言语句,提醒核查程序是否知足预先设定的要求。逻辑解释:if not codition:crash progam

num = input('give a number: ')
assert 0 < num < 100, 'the number needs to be realistic'

 

 

七、条件语句 for 循环

  在条件为真时,反复执行代码块。python时面向对象的语言,也就是条件为真时,对象能够反复执行代码块,因此可进行 for 循环的对象都是可迭代的对象。可执行r 循环语句的对象确定是可迭代对象,可是可迭代对象不必定就能执行 for 循环语句。

  一、迭代字典

 

y = {'a': 'b', (1, 2): 'c', 42: 'age'}
for key in y:
    z = y.values()
    x = list(y.values())
    print(key, "corresponds to:", z, x)

 

 

 

笔记:

  一、方法:d.items、d.keys、d.values 返回值的数据类型是字典视图,字典视图只能肯定其长度(函数 len )和执行成员检查( in )。

  二、字典元素的排列顺序是不肯定的。若是须要按照特定的顺序迭代字典的键或者值,须要将键或者值放在列表中,对列表进行排序,而后以列表中的元素即键或者值进行迭代。

  三、模块collections中的OrderdDict类可让映射记住其项的插入顺序。

 

# 代码来源:https://www.jianshu.com/p/3a49908295ce
In [1]: from collections import OrderedDict In [2]: favorite_language = OrderedDict() In [3]: favorite_language["zhangsan"] = "Enlish" In [4]: favorite_language["lisi"] = "Chinese" In [5]: favorite_language["wangwu"] = "French" In [6]: favorite_language Out[6]: OrderedDict([('zhangsan', 'Enlish'), ('lisi', 'Chinese'), ('wangwu', 'French')]) In [7]: for name, language in favorite_language.items(): ...: print(name +": " + language) ...: zhangsan: Enlish lisi: Chinese wangwu: French In [8]: type(favorite_language) Out[8]: collections.OrderedDict

 

  四、迭代工具---模块itertools、内置函数 zip

  模块itertools

  模块里面有一部分函数能够帮助迭代序列。

  函数 zip:

  函数zip能够将两个序列“缝合”,返回一个由元组组成的序列(序列的元素都有编号,为何不能经过索引获取元组呢???)。返回值是一个适合迭代的对象,可使用list将其转换为列表。

num1 = [1, 2, 3, 4]
num2 = ['day1', 'day2', 'day3']
x = zip(num1, num2)
print((1, 'day1') in x)
y = list(x)
print((2, 'day2') in y)
print(x)
print(y)
print(dir(zip()))

笔记:

  函数zip和函数reversed返回的是一个能够迭代的神秘对象。该对象能够用于在for语句中使用判断是否包含指定元素,或者调用join、list将可迭代的对象输出为字符串或者列表,可是该序列却不能执行索引或者切片操做,也不能调用列表方法。

八、循环中间运行,特殊做用的语句

  break语句:结束(跳出)循环。代码重复一般被视为坏事,while Ture:... ;if...:break技巧能够是一种解决该问题的一种方法。

  continue语句:结束当前迭代,并调到下一次迭代开头

  pass语句:python中的pass语句什么都不执行,可是能够修复Python问题。

  del语句:删除到对象的引用还会删除名称自己,致使该名称未被定义,可是该对象没有被删除。

 

x = [x for x in range(1, 10, 2)]
y = x
print(x, y)
del x
print(y)
print(x)

 

 

  曾为语句但现为函数的 exec 和与其相关的 eval:exec将字符串当成代码执行,因为字符串里面的内容可能会污染代码的命名空间,须要向该函数传递一个字典做为命名空间(scope = {} ,scope里面还包含全部内置函数和值的字典__builtins__)。eval将字符串当成有效的表达式来求值,并返回结果。eval的结果能够是字符,序列和映射等数据结构。不要滥用eval函数:不要直接使用eval直接转换 input 的结果,由于可使用其余模块进行强大的操做。如:input输入的是'__inport__('os').system('touch text')'将可直接操做项目内容,可能危害项目正常运行。

 

from math import sqrt
scope = {} # 能够在该命名空间添加一些值 scope['x'] = 1 exec('sqrt = 4',scope)
print(dir(scope))
print(sqrt)
print(sqrt(4))

 

  

print(eval(16*2))

 

print(eval('16*2'))

 

print(eval(input('what: ')))

 

 九、列表推导

  列表是从其余列表建立列表的方式。列表推导里面元素的循环语句能够嵌套。

 

x = [x for x in range(1, 10, 2)]
print(x)

 

 笔记:

  一、列表推导是代码更改整洁

  二、字典的使用可使代码运算效率更高,由于字典能够减小检查的可能性。

相关文章
相关标签/搜索