Python3—笔记

Python3—笔记

一、Python概述

1.1 代码编写方式:

  • 交互式
  • 全部编辑好后运行

1.2 作用域

默认使用 ‘缩进’ 来区分代码 属于哪部分

1.3 注释


# 这是单行注释


'''
	这是多行注释,实际上是一个字符串
'''

1.4 输入——input()

# 括号内为提示信息,输入的信息存储在变量 name 中
#注意:input()输入的实际上是字符串,若要输入数字进行运算,可以使用强制转换  
	name = input('请输入你的姓名')

# 强制转换:
	#第1种方法(适用于所有类型):    
    age  = input('输入年龄')
    newAge = int(age)+1
            
            
    #第2种方法(适用于数值类型,eval()实际上是将字符串强行作为数字使用,相当于去掉引号):    		
    age  = input('输入年龄')
    newAge = eval(age)+1

1.5 输出——print()

#单个字符串
print("hello world")


#多个字符串,print()会依次打印每个字符串,遇到逗号“,”会输出一个空格
print('The quick brown fox', 'jumps over', 'the lazy dog')


#输出 计算结果
print(100 + 200)

1.6 数据类型

注意: 整数浮点数 在计算机内部存储的方式是不同的,整数 运算永远是精确的(除法也是精确的),而浮点数 运算则可能会有四舍五入的误差。

1.6.1 int


#十进制
	123,-123,200
#十六进制  用0x前缀和0-9,a-f表示
	0xff00,0xa5b4c3d2

#对于很大的数,例如10000000000,很难数清楚0的个数。Python允许在数字中间以_分隔,因此,写成 10_000_000_000 和 10000000000 是完全一样的。十六进制数也可以写成 0xa1b2_c3d4

1.6.2 float

# 对于很大或很小的浮点数,就必须用科学计数法表示,把10用e替代,
1.23x10^9    就是   1.23e9,
    
# 12.3e8  ,0.000012   可以写成   1.2e-5

1.6.3 str

#使用单引号或者双引号包裹
		'你好'
    	"你好"
# 如果字符串内需要有单引号:外面用双引号
		" I'm a boy "
# 如果字符串内需要有双引号:外面用单引号  
		' I am a "boy" '
#  如果字符串内需要有 单引号和双引号 :使用转移字符\
		'  I\'m \"OK\"!   '   表示 I'm "OK"!

#如果字符串很长,需要换行:使用三引号
		print('''line1
		line2
		line3''')

1.6.4 bool

# 布尔值只有True、False两种值,布尔值可以用and、or和not运算
>>> True and True
True

>>> True and False
False

>>> False and False
False

>>> 5 > 3 and 3 > 1
True

1.6.5 None 空值

1.6.6 list (有序列表)

'''
list有以下几个特点:
			查找和插入的时间随着元素的增加而增加;
			占用空间小,浪费内存很少。

'''


# list的格式(list中的元素的 数据类型 可以不同,甚至可以是1个list)
>>> classmates = ['Michael', 'Bob', 'Tracy']
>>> classmates
['Michael', 'Bob', 'Tracy']


# 使用len() 获取list长度
>>> len(classmates)
3


# 使用index 访问list中的元素(index的范围为:0 ~ len-1  ),当索引超出了范围时,Python会报一个IndexError错误
>>> classmates[0]
'Michael'

# list 的最后一个元素的两种表示方法
>>> classmates[len(classmates) - 1]
>>> classmates[-1]

##############   插入相关的方法 ########################

# 向list的末尾追加1个元素 append()
>>> classmates.append('Adam')
>>> classmates
['Michael', 'Bob', 'Tracy', 'Adam']


# 在指定位置前 插入1个元素
>>> classmates.insert(1, 'Jack')
>>> classmates
['Michael', 'Jack', 'Bob', 'Tracy', 'Adam']


##############   删除相关的方法 ########################

# 删除 最后1个元素
>>> classmates.pop()
'Adam'


# 删除 指定元素
>>> classmates.pop(1)
'Jack'
>>> classmates
['Michael', 'Bob', 'Tracy']


##############  替换相关的方法 ########################

>>> classmates[1] = 'Sarah'
>>> classmates
['Michael', 'Sarah', 'Tracy']

1.6.7 tuple (元组)

一种内部元素不可更改的list , 相较于 list 更安全

############# tuple 的定义 ###############

>>> t = (1, 2)
>>> t
(1, 2)


# 定义一个只有1个元素的tuple,
# 后面加逗号是为了避免被直接当成内部元素

>>> t = (1,)
>>> t
(1,)

1.6.8 dict (字典)

字典: 内部为键值对,“键”在该字典中必须唯一 ,字典是无序的

'''
dict有以下几个特点:

		查找和插入的速度极快,不会随着key的增加而变慢;
		需要占用大量的内存,内存浪费多。
		key 不可变,因为用key查找value时,必须依靠key进行 hash运算

'''

############## dict的定义 ###############
>>> d = {'Michael': 95, 'Bob': 75, 'Tracy': 85}
>>> d['Michael']
95


# 放入元素
>>> d['Adam'] = 67
>>> d['Adam']
67


# 获取元素方法 get(键,当键不存在时的返回值【默认为None】)
>>> d.get('Thomas')
None
>>> d.get('Thomas', -1)
-1

# 删除某个键时,该键的值也会删除
>>> d.pop('Bob')
75
>>> d
{'Michael': 95, 'Tracy': 85}

1.6.9 set (集合)

集合类型 : 要创建一个set,需要提供一个list作为输入集合, set是无序的, 重复元素在set中自动被过滤 ,与dict一样内部元素不可变


>>> s = set([1, 2, 3])
>>> s
{1, 2, 3}


>>> s = set([1, 1, 2, 2, 3, 3])
>>> s
{1, 2, 3}

############ 添加 set的元素 ########

# 添加set的元素 add( )
>>> s.add(4)
>>> s
{1, 2, 3, 4}

>>> s.add(4)
>>> s
{1, 2, 3, 4}


# 删除元素 remove( )
>>> s.remove(4)
>>> s
{1, 2, 3}


########### 集合set 之间的运算  ########### 

>>> s1 = set([1, 2, 3])
>>> s2 = set([2, 3, 4])

# 并集
>>> s1 & s2
{2, 3}

# 交集
>>> s1 | s2
{1, 2, 3, 4}

1.7 运算符

# +
		a = 1+2

# - 
		a= 3-1    
    
# *    
		a= 3*2
    
# / 除法结果一定是小数
		a= 2/3	# 0.66666666
    	b= 6/2

# // 整除
		a= 6//5 # 1
    
    
# % 取余数    
		a = 7 % 5  # 2

1.8 条件判断

'''
if语句执行有个特点,它是从上往下判断,如果在某个判断上是True,把该判断对应的语句执行后,就忽略掉剩下的elif和else
'''

# 格式
age = 3
if age >= 18:
    print('adult')
elif age >= 6:
    print('teenager')
else:
    print('kid')   

    
# 简写,其中 x 只要为 非零数值、非空字符串、非空list等,就判断为True,否则为False
if x:
    print('True')

1.9 循环

#################  for 循环 ######################


# for...in 循环
names = ['Michael', 'Bob', 'Tracy']
for name in names:
    print(name)

    
    
# range(a,b)函数 的范围是[a,b) 
# 例如:结果=5050   即:0-100
sum = 0
for x in range(101):
    sum = sum + x
print(sum) 


#################  while循环 ########################

# 在循环内部变量n不断自减,直到变为-1时,不再满足while条件,循环退出
sum = 0
n = 99
while n > 0:
    sum = sum + n
    n = n - 2
print(sum)


#################### break关键字 #################### 
n = 1
while n <= 100:
    if n > 10: # 当n = 11时,条件满足,执行break语句
        break # break语句会结束循环
    print(n)
    n = n + 1
print('END')


#################### continue关键字 #################### 
n = 0
while n < 10:
    n = n + 1
    if n % 2 == 0: # 如果n是偶数,执行continue语句
        continue # continue语句会直接继续下一轮循环,后续的print()语句不会执行
    print(n)

1.10 编码: Unicode ,ASCII ,UTF-8

ASCII编码和Unicode编码的区别:

  1. ASCII编码1个字节,而 Unicode编码 通常是2个字节
  2. 文本上全部英文时,Unicode 编码ASCII 编码 需要多一倍的存储空间,在存储和传输上就十分不划算。
  3. Unicode编码转化为“可变长编码”的 UTF-8编码UTF-8编码把一个Unicode字符根据不同的数字大小编码成1-6个字节,常用的英文字母被编码成1个字节汉字通常是3个字节,只有很生僻的字符才会被编码成4-6个字节
  4. 传输的文本包含大量英文字符时,用 UTF-8编码 更节省空间 。

1.11 函数

1.11.1 内置函数 速查表

官网: https://docs.python.org/3/library/functions.html

1.11.2 自定义函数

'''
 调用函数的时候,如果传入的参数数量不对,会报`TypeError`的错误 
 数据类型检查可以用内置函数isinstance()实现
'''


###################### 自定义 函数  ###################### 

#如果没有return语句,函数执行完毕后也会返回结果,只是结果为None。return None可以简写为return
def my_abs(x):
    if x >= 0:
        return x
    else:
        return -x

    
    
    
#定义一个什么事也不做的空函数,使用pass 来充当占位符
def nop():
    pass




#  数据类型检查可以用内置函数isinstance()实现
# isinstance(参数1,参数2) 如果参数1(object)的类型 与 参数二的类型(classinfo)相同则返回 True,否则返回 False
def my_abs(x):
    if not isinstance(x, (int, float)):
        raise TypeError('bad operand type')
    if x >= 0:
        return x
    else:
        return -x
    
    
    
# 返回多个值的函数(实际上返回的是1个 tuple)
import math

def move(x, y, step, angle=0):	#实际上 move( )返回的是1个 tuple
    nx = x + step * math.cos(angle)
    ny = y - step * math.sin(angle)
    return nx, ny

>>> x, y = move(100, 100, 60, math.pi / 6)
>>> print(x, y)
151.96152422706632 70.0

1.11.3 函数参数

1、默认参数:

默认参数必须指向 不可变的对象【如: str , tuple等】
如果默认参数为一个 list,则每次调用会记住上次调用的操作,造成结果不对

############### 默认参数 ###############

# 例如 以下的 n=2 就是默认参数
	# 当我们调用power(5)时,相当于调用power(5, 2)
	# 而对于n > 2的其他情况,就必须明确地传入n,比如power(5, 3)
	
def power(x, n=2):
    s = 1
    while n > 0:
        n = n - 1
        s = s * x
    return s

2、可变参数(即:参数前加*号):

允许传入0个或任意个参数,这些可变参数在函数调用时自动组装为一个tuple

############### 可变参数 ###############

# 在函数内部,参数numbers接收到的是一个tuple,
# 因此,函数代码完全不变。但是,调用该函数时,可以传入任意个参数,
# 包括0个参数,即:在普通的参数前加上*
def calc(*numbers):
    sum = 0
    for n in numbers:
        sum = sum + n * n
    return sum

>>> calc(1, 2)
5
>>> calc()
0

3、关键字参数(即:参数前加2个星号*):

允许传入0个或任意个含参数名的参数,这些关键字参数在函数内部自动组装为一个dict

############### 关键字参数 ###############

# 关键字参数 允许你传入0个或任意个含参数名的参数,
# 这些关键字参数在函数内部自动组装为一个dict

def person(name, age, **kw):
    print('name:', name, 'age:', age, 'other:', kw)
    
    
# 只传入必选参数时
>>> person('Michael', 30)
name: Michael age: 30 other: {}   
    
    
# 传入任意个数的关键字参数时           
>>> person('Adam', 45, gender='M', job='Engineer')
name: Adam age: 45 other: {'gender': 'M', 'job': 'Engineer'}    

4、命名关键字参数:

#########  命名关键字参数  ################

# 命名关键字参数:限制关键字参数的名字
#命名关键字参数需要一个特殊分隔符*,*后面的参数被视为命名关键字参数

def person(name, age, *, city, job):
    print(name, age, city, job)
    
# 如果函数定义中已经有了一个可变参数,
# 后面跟着的命名关键字参数就不再需要一个特殊分隔符*了 
def person(name, age, *args, city, job):
    print(name, age, args, city, job)
    
#命名关键字参数 (调用时)必须连同 参数名 一起传入【有默认值时除外】   
person('Jack', 24, city='Beijing', job='Engineer')
posted @ 2023-07-17 09:49  卤香味泡面  阅读(20)  评论(0)    收藏  举报