Python笔记-2-基础知识、操作符、条件语句

数字

整数

    进制的表达:0x十六进制,0o八进制,0b二进制

    bool: True 、False

浮点数

    小数点、科学计数法、对无理数做近似表达

复数 1+2j

字符串

‘“单、双引号引用的序列

‘“三引号:实现折行,可在其中自由使用单双引号

字符串前加r或R,表示该字符串不做特殊处理,忽略转义字符

转义

\\ \t \n \r \' \"(不再是界定符了)

缩进

表示层次关系

约定4个空格为tab

续行

在行尾使用\

如果使用各种括号,认为括号内是一个整体

标识符

一个名字,指代一个值

字母、下划线、数字组成

不能以数字开头

不能是python关键字 def class等

区分大小写

约定

不用中文

不许使用歧义单词

不随便使用下划线开头的标识符

常量

一旦赋值就不能改变值的标识符

python中无法定义常量

字面常量

一个单独的量 12、“abc”、‘123123e-9’

变量

赋值后,可以改变值的标识符

Python的语言类型:动态语言、强类型语言

静态编译型语言

事先声明变量类型,类型不能再改变

编译时检查

动态编译型语言

不用事先声明类型,随时可以赋值为其他类型

编译时不知道什么类型(不报错),运行时才确定

强类型

不同类型之间操作,必须先强制类型转换为同一类型,比如print('a'+1)这样就不行

弱类型

不同类型间可以操作,自动隐式转换

算数运算符

+ - * / % **
/为浮点数除法,存在除0异常
//为整除

位运算符

科学计算时提高效率

& | ~ ^异或 << >>

常用方式 乘除2的倍数 32//4 相当于 32 >> 2

12 0xc 0o14 0b1100 ~12为

原码 正数原码就是二进制 负数的原码是绝对值求原码,最高位补加1

反码 正数反码同原码 负数反码符号位不变其余按位区反

补码 正数补码同原码 负数补码符号位不变其余按位取反再+1 计算机中只能存补码 补码的补码就是原码

负数表示

-12

11100

10100

11011

11100

最高位永远表示符号.. 2^7 -> +-128

12

原码

0 1100

~操作

1 0011

转换为反码

1 1100

再加1保存为,补码

1 1101

比较运算符

== != < > >= <= 

返回一个bool值

不同类型不能比较大小,但可以比较是否相等

链式比较

逻辑运算符

and or not

短路运算符

    and如果第一个表达式为False,后面就不算了,逻辑表达式一定是False

    or如果第一个表达式为True,后面就不算了,逻辑表达式一定是Ttue

咱们先理解or和and的执行机制,or 如果左边为真就直接判断为真不去管右边是什么,如果左边为假再去看右边。 and 如果左边为假就直接判断为假不管右边是什么,如果左边为真再去看右边。 这个套在咱们这个赋值语句里边其实就有点短路的意思。 例如:

v2 = 1 and 3 and的左边的1为真,则还需要看右边所以最终v2的值就是3

v7 = 1 or 3 or的左边的1为真,则不需要看右边,所以最终v7的值是1

最终再加个规则and的优先级大于or,再看个结合的例子:

v8 = 0 or 1 and 2 and优先级大于or,所以先执行and ,就变成了v8 = 0 or 2,所以最终v8的值是2

运算符

赋值运算符 = += -= *= /= %=

成员运算符 in not in

身份运算符 is is not is比较的是id()

运算符优先级

表达式:由数字,符号,括号,变量等的组合

算数表达式

逻辑表达式    

赋值表达式:python中赋值即是定义,如果一个变量已经定义,赋值相当于重新定义

Python变量的实质:
要了解这个问题的原因我们先需要一个准备知识,那就是:Python变量到底是如何实现的? Python变量区别于其他编程语言的申明&赋值方式,采用的是创建&指向的类似于指针的方式实现的。即Python中的变量实际上是对值或者对象的一个指针(简单的说他们是值的一个名字)。我们来看一个例子。

p = 1

p = p+1

对于传统语言,上面这段代码的执行方式将会是,先在内存中申明一个p的变量,然后将1存入变量p所在内存。执行加法操作的时候得到2的结果,将2这个数值再次存入到p所在内存地址中。可见整个执行过程中,变化的是变量p所在内存地址上的值 上面这段代码中,Python实际上是现在执行内存中创建了一个1的对象,并将p指向了它。在执行加法操作的时候,实际上通过加法操作得到了一个2的新对象,并将p指向这个新的对象。可见整个执行过程中,变化的是p指向的内存地址

函数参数默认值陷阱的根本原因

一句话来解释:Python函数的参数默认值,是在编译阶段就绑定的。

现在,我们先从一段摘录来详细分析这个陷阱的原因。下面是一段从Python Common Gotchas中摘录的原因解释:

Python’s default arguments are evaluated once when the function is defined, not each time the function is called (like it is in say, Ruby). This means that if you use a mutable default argument and mutate it, you will and have mutated that object for all future calls to the function as well.

可见如果参数默认值是在函数编译compile阶段就已经被确定。之后所有的函数调用时,如果参数不显式的给予赋值,那么所谓的参数默认值不过是一个指向那个在compile阶段就已经存在的对象的指针。如果调用函数时,没有显示指定传入参数值得话。那么所有这种情况下的该参数都会作为编译时创建的那个对象的一种别名存在。如果参数的默认值是一个不可变(Imuttable)数值,那么在函数体内如果修改了该参数,那么参数就会重新指向另一个新的不可变值。而如果参数默认值是和本文最开始的举例一样,是一个可变对象(Muttable),那么情况就比较糟糕了。所有函数体内对于该参数的修改,实际上都是对compile阶段就已经确定的那个对象的修改。 对于这么一个陷阱在 Python官方文档中也有特别提示:

Important warning: The default value is evaluated only once. This makes a difference when the default is a mutable object such as a list, dictionary, or instances of most classes. For example, the following function accumulates the arguments passed to it on subsequent calls:

如何避免这个陷阱带来不必要麻烦

当然最好的方式是不要使用可变对象作为函数默认值。


使用函数

print()打印

str()将类型转换为字符串

bin()整型数转化为二进制,输出为字符串


解释型语言:源代码 - 虚拟机转化为字节码 - 运行在虚拟机上 - 字节码执行的时候还是要转换为本地cpu支持的指令

垃圾回收:清除标记的垃圾+内存整理

python使用引用计数记录所有对象的引用数,引用计数是针对对象而言的

当引用数==0,它就可以被垃圾回收
计数增加:赋值给其他变量就增加引用数
计数减少:
    函数运行结束时,局部变量被自动销毁,对象引用计数减少
    变量被赋值给其他对象
有关性能的时候,要考虑变量的引用,但是要不要释放看需求 

import sys
a = 1000
b = a
sys.getrefcount(a)

程序控制

顺序:先后执行
分支:根据不同的情况判断,条件满足执行某条件下的语句
循环:条件满足就反复执行

if语句:

if condition布尔值:
    代码块
Python笔记-2-基础知识、操作符、条件语句_第1张图片
image.png

多分支

if condition1:

    stat 1

elif condition2:

    stat 2

elif condition3:

    stat 3

...

else:

    stat n

分支嵌套:可以是分支、循环的嵌套

num1 = int(input('num1---->'))
num2 = int(input('num2---->'))
if num1>num2:
    print(num1)
else:
    print(num2)
num = int(input('num--->'))
if num//10 == 0:
    bit = 1
elif num//100 == 0:
    bit = 2
elif num//1000 == 0:
    bit = 3
elif num//10000 == 0:
    bit = 4
elif num//100000 == 0:
    bit = 5
else:
    bit = 'biger than 5'
print("bit=",bit,"\n")
// 直接比较效率高
// 折半比较效率更高 

nums = input("不超过5位的正整数,q退出")
while 1:
    if nums.isdigit():
        numn = int(nums)
        if numn <= 0 or numn > 99999:
            print("重新输入")
            nums = input("不超过5位的正整数,q退出")
            continue
        else:
            print("len=",len(nums))
            for i in range(len(nums)):
                print(numn%10)
                numn //= 10
        nums = input("不超过5位的正整数,again,q退出")
        continue
    else:
        if nums == "q" or nums == "Q":
            print("Bye!\n")
            break
        else:
            print("error input!")
            nums = input("不超过5位的正整数,again,q退出")
            continue

使用函数

input([promrt]) 输入函数

int() 将字符串转数字化为整数数字

max(a,b) 提取最大值

len() 计算字符串的长度

pass语句:空操作的站位语句

import math.log10()

你可能感兴趣的:(Python笔记-2-基础知识、操作符、条件语句)