【Python】python数据类型、变量定义、控制结构、函数定义等基础知识


  本文是我在学习Python过程当中的心得和学习笔记,包含了Python的入门知识,控制结构,列表,字典,元组,集合,字符串,函数等等Python基础内容,并附上了学习的代码,仅供大家参考。如果有问题,有错误欢迎大家留言。对博主其他文章感兴趣的可以通过 【CSDN文章】晚安66博客文章索引找到。

一、Python入门知识

关于pycharm的永久破解安装,深度学习环境搭建,请看这篇文章:【人工智能】一文搞定 什么是Conda, anconda, pytorch, 以及pycharm和pytorch搭建深度学习环境

1.1 print函数

#输出数字
print(520)
print(38.5)
#输出字符串
print("HelloWorld")
print('HelloWorld')
#输出运算符表达式
print(3+1)
#输出到文件中,1.指定盘符存在,2.使用file = fp
#a+表示若文件不存在则创建,若存在则在原有基础上追加
fp = open('C:/text.txt','a+')
print('helloworld',file = fp)
fp.close()
#不换行输出
print('hello','world','python')

1.2 转义字符

#转义字符
    print('hello\nworld')   #\  +转义功能的首字母,例如n-->newline的首字母表示换行
    print('hello\tworld')   #\t表示一个制表位,tab占四个字节
    print('helloooo\tworld')
    print('hello\rworld')   #world将hello进行了覆盖
    print('hello\bworld')   #\b是退一个格,将o退没了

    print('http:\\\\www.baidu.com')
    print('老师说:\'大家好\'')   #将单引号输出需要加\

    #原字符,不希望字符串中的转义字符起作用,就使用原字符,就是在字符串之前加上r,或R
    print(r'hello\nworld')
    #注意事项,最后一个字符不能是反斜杠,以下代码会报错
    #print(r'hello\nworld\')

1.3 变量定义规则

1.字母,数字,下划线_
2.区分大小写
3.不能以数字开头,不能是保留字
变量有三种属性:标识,类型,值

name = '玛利亚'
print(name)
print('标识',id(name))		#类似于C当中的内存地址
print('类型',type(name))
print('值',name)
a=3.1415926
print(a,type(a))

1.4 数据类型

整数类型 int,其中,十进制为默认进制,二进制以0b开头,八进制以0o开头,十六进制以0x开头
浮点数类型 float

n1=1.1
n2=2.2
n3=2.1
print(n1+n2)         #计算机采用二进制存储,存在精度问题
print(n1+n3)        #有时能够正常输出,有时不能

from decimal import Decimal
print(Decimal('1.1')+Decimal('2.2'))        #正常输出

布尔类型 bool

print(f1,type(f1))
print(f2,type(f2))

#布尔值可以转成整数运算
print(f1+1)     #2
print(f2+1)     #1

字符串类型 str

str1 = '人生苦短,我用Python'
str2 = "人生苦短,我用Python"
str3 = '''人生苦短,     
我用Python'''         #可以换行赋值
str4 = """人生苦短,    
我用python"""          #可以换行赋值
print(str1,type(str1))
print(str2,type(str2))
print(str3,type(str3))
print(str4,type(str4))

1.5 数据类型转换

str(), int(), float()
任何数据都可以通过str()函数转换为str类型

s1 = '128'
f1 = 98.7
s2 = '76.77'
ff = True
s3 = 'hello'
print(int(s1),type(int(s1)))    #将str转成int类型,字符串为数字串
print(int(f1),type(int(f1)))    #将float转成int类型,只截取整数部分,舍掉小数部分
#print(int(s2),type(int(s2)))    #将str转成int类型,报错,因为字符串为小数串
print(int(ff),type(int(ff)))    #将str转成int类型,字符串为数字串
#print(int(s3),type(int(s3)))    #将str转成int类型,字符串必须为整数数字串
print(int(s1),type(int(s1)))    #将str转成int类型,字符串为数字串

1.6 各类运算符

算术运算符:
加减乘除:+ - * /
整除运算://
取余运算:%
次幂运算:m**n, 表示m的n次幂

print(11//2)    #整除运算
print(2**3)     #2*2*2=8

print(9//4)     #2
print(-9//-4)   #2

#一正一负整除向下取整
print(-9//4)    #-3
print(9//-4)    #-3

#一正一负要用公式,公式:余数 = 被除数-除数*商
print(-9%4)    #3      -9-4*(-3)=3
print(9%-4)    #-3      9-(-4)*(-3)=-3

赋值运算符 ‘=’:

#链式赋值
a=b=c=20
#参数赋值,+=,-=,/=,*=,%=,//=
#解包式赋值
a,b,c=10,20,30

#数值交换
a,b = 10,20
print('交换之前:',a,b)
a,b = b,a
print('交换之后:',a,b)

比较运算符有:>, <, >=, <=, ==, !=

a = 10
b = 10
#==, !=是对象值得比较
#is, is not是对象id的比较,即标识的比较

print(a==b)         #True   说明,a与b的value相等
print(a is b)       #True   说明,a与b的标识相等, 标识相当于c中的内存地址

布尔运算符:
and: 与运算
or: 或运算
not: 非运算
in 和 not in

#   in 和 not in
s = 'helloworld'
print('w' in s)     #True
print('k' in s)     #False
print('w' not in s) #False
print('k' not in s) #True

 一般对象的布尔值

#测试对象的布尔值
print("---------以下对象的布尔值为False,其余的均为True--------")
print(bool(False))  #False
print(bool(0))      #False
print(bool(0.0))    #False
print(bool(None))   #False
print(bool(''))     #False
print(bool(""))     #False
print(bool([]))     #空列表
print(bool(list())) #空列表
print(bool(()))     #空元组
print(bool(tuple()))    #空元组
print(bool({}))     #空字典
print(bool(dict())) #空字典
print(bool(set()))  #空集合

位运算符
位与&:转换成二进制,按位与
位或 |:转换成二进制,按位或
右移位运算符>>: 低位溢出舍弃,高位补0
左移位运算符<<:高位溢出舍弃,低位补0
Python运算符的优先级如下图所示,一般我们如果理不清运算符的优先级可以加上括号,括号内部优先运算。
在这里插入图片描述

1.7 input()函数

  双引号内部为输入提示内容,input()函数输入为字符串,然后赋值给输出,返回输出值。这里注意input()函数的返回值为字符串类型。

#input()函数
present = input("大圣想要什么礼物呢?")	
print(present,type(present))

#从键盘录入两个整数,计算两个整数的和
a = int(input('请输入一个加数:'))
b = int(input('请输入另一个加数:'))
print(type(a),type(b))
print(a+b)

1.8 注释书写规范

#单行注释
"""嘿嘿,
我是
多行
注释"""

 中文编码声明注释,在Python文件的开头加上中文声明注释,指定源码文件的编码格式

#coding:gbk   

1.9 开头文件注释和函数标准注释

  文件开头注释,Pythoncharm中file->settings->editor->code style->file and code templates->python script中输入以下代码:

# @Author: 小黄
# @Time: ${DATE} ${TIME}
# @Code Name: 
# @Code Function:

函数标准注释:

"""
				FunctionName:			函数名
				Purpose:				函数目的
				Parameter:				函数参数
				Return:					函数返回值    	
"""

二、控制结构

2.1 if-else型控制结构

 这里注意Python不等式书写方式和C语言略有不同,Python也支持C语言的写法。

score = int(input('请输入一个成绩:'))
if 90<=score<=100:	%C语言当中,应写为:score>=90&&score<=100
    print('A级')
elif 80<=score<90:
    print('B级')
elif 70<=score<80:
    print('C级')
elif 60<=score<70:
    print('D级')
elif 0<=score<60:
    print('E级')
else:
    print('请输入一个0-100之间的数')

  Python当中if-else语句的另一种用法,在print函数当中,若表达式为真,则输出前面语句的值,否则输出后面的语句。

num_a = int(input('请输入第一个整数'))
num_b = int(input('请输入第二个整数'))
print(str(num_a)+'大于等于'+str(num_b)  if num_a>=num_b else str(num_a)+'小于'+str(num_b))

2.2 pass语句

  pass语句什么都不做,只是一个占位符。一般我们在还没想好代码怎么写的时候、仅仅搭建语法结构的时候使用。如以下代码,可以运行,但不会报错。

answer = input('您是会员吗y/n')
if answer == 'y':
    pass
else:
    pass

2.3 range函数

  range()函数的返回值是一个迭代器对象,产生的是一定范围的整数型序列。
  range类型的优点:不管range对象表示的整数序列有多长,所有range对象占用的内存空间都是相同的,因为仅仅需要存储start,stop和step,只有当用到range对象时,才会去计算序列中的相关元素。注意range[start,stop)是产生从start开始,到stop结束的整数序列,但不包括stop。
  可以使用in与not in 判断整数序列中是否存在(不存在)指定的整数

#解包式赋值
start,stop,step= 1,10,2

r = range(stop)   #默认起始值为0,步长为1,给定结束值为stop
print(r)
print(list(r))

r = range(start,stop) #给定起始值为start,步长默认为1,给定结束值为stop
print(list(r))

r = range(start,stop,step) #给定起始值为start,给定步长为step,给定结束值stop
print(list(r))

2.4 while函数

  这里要注意,print函数要顶格写,否则就包含在while循环当中。再说说C和python的区别,C使用{}来表示语句的包含关系,而Python用缩进来表示{}。
  另外,在C语言当中有a++,因为在 C 语言中,值的存储以变量名来区分,一个变量具有单独的地址空间;但是在Python当中,只要值是相同的,不管你的变量名是什么,它们的地址都是相同的,也就是说, Python 允许一个值被多个变量名称绑定。
  在脚本式编程环境中是这样,但是在交互式编程环境下,Python 为了优化速度,使用了小整数对象池, 避免为整数频繁申请和销毁内存空间,编译器会有一个小整数池的概念,小整数的定义是 [-5, 256] 这些整数对象是提前建立好的,不会被垃圾回收,也就是说,变量在这个范围内是会按照前面所说的,共用内存地址,超过这个值则使用单独的内存地址。

sum = 0
a = 0
while a<100:
    sum = sum+a
    a+=1
print('和为',sum)

2.5 for-in遍历结构

for item in 'python':   #依次取出字符串中的单个字符赋值给item,第一次取出的是p,以此类推
    print(item)
#range()产生整数序列
for i in range(10):   #依次将range(10)当中的数赋值给i
    print(i)
#如果循环体内不需要用到自定义变量,那么用‘_’代替,如下所示
for _ in range(3):
    print('人生无常,大肠包小肠')

2.6 break和continue语句

执行break语句后,程序就会退出循环。注意如有多层循环,则break仅是退出最内层的循环,然后进入外一层的循环。

#输入密码,共有三次机会
for num in range(3):
    password = input('请输入密码:')
    if password == '8888':
        print('密码正确')
        break
    else:
        print('密码错误')

执行continue语句后,程序就会跳出当次循环,直接进行下一次循环。

#输出5的倍数
for i in range(1,51):
    if i%5 != 0:
        continue
    print(i)

2.7 else和while for-in联合使用

  这里的第二个else视为循环语句的一部分,在循环结束后自动运行,而当程序从break语句退出循环后,第二个else后面的内容也就不再运行了。

for i in range(3):
    password = input('请输入密码:')
    if password == '8888':
        print('密码正确')
        break
    else:
        print('密码错误,您还有'+str(2-i)+'次机会尝试。')
else:
    print('对不起,三次密码均错误,请在3分钟后继续尝试。')

这里的while-else语句的原理和for-in-else一样。

a = 0
while a<3:
    password = input('请输入密码:')
    if password == '8888':
        print('密码正确')
        break
    else:
        print('密码错误,您还有'+str(2-a)+'次机会尝试。')
    a+=1
else:
    print('对不起,三次密码均错误,请在3分钟后继续尝试。')

2.8 多层嵌套循环

  这里的end='\t’表示以\t结尾,即输出一个制表位

#输出乘法表
for i in range(1,10):
    for j in range(1,i+1):
        print(str(j)+'*'+str(i)+'='+str(i*j),end='\t')
    print()	#输出一个换行符

三、函数

函数的定义
在这里插入图片描述

3.1 函数的参数调用

参数赋值

'''函数的参数调用'''
def calc(a,b):      #这里a和b称为形参
    c = a+b
    return c
#10和20称为实参,按位置参数赋值,即形参分别赋值为a = 10, b = 20
result = calc(10,20)
print(result)
#按关键字赋值,赋值前后顺序任意,一般用在参数过多的情况下,顺序赋值太复杂
#即形参分别赋值为a = 20,b=10
res =  calc(b=10,a=20)
print(res)

默认参数
这里将形参b的默认值设置为10
若函数调用时没有给定b对应的实参,那么b就为默认值;反之,则b的值为给定的实参

def fun(a,b=10):
    print(a,b)
fun(100)
fun(20,30)

未定参数:在不知道具体会输入多少参数时使用

def fun(*args): #函数定义时,个数可变的位置参数
    print(args)     #输出是元组
    print(args[0])
fun(10)
fun(20,30)

def fun(**args): #函数定义时,个数可变的关键字形参
    print(args)     #输出是字典
fun(a=10)
fun(a=20,b=30)

'''在一个函数定义当中,既有个数可变的位置参数,又有个数可变的关键字形参
那么,可变的位置参数定义必须放在可变的关键字形参之前,否则程序都会报错
另外,不允许定义两个或两个以上的连续可变的位置参数或者连续变的关键字形参,程序均会报错
'''
def fun2(*arg1,**arg2):
    pass

3.2 函数的返回值

'''函数的返回值
1、如果函数没有返回值,则return可以不写或者写个return然后没有返回参数
2、函数返回值仅有一个,直接返回该函数return的类型
3、函数返回值如果为多个, 则返回结果为元组
'''
def fun1():
    print('hello')
    return  #可省略
fun1()

def fun2():
    return  'hello' #return单参数
res = fun2()
print(res)

def fun3():
    return 'hello','world'  #return多参数
print(fun3())   #输出值为元组类型

3.3 实参对象进入函数后的变化

'''可变对象和不可变对象进入函数后的变化'''
def fun(arg1,arg2):
    print('arg1',arg1)
    print('arg2', arg2)
    arg1 = 100
    arg2.append(10)
    print('arg1', arg1)
    print('arg2', arg2)
    return  #此函数没有返回值也可以不写return
n1 = 11
n2 = [22,33,44]
#进入函数前的值
print('n1', n1)
print('n2', n2)
fun(n1,n2)  #这里表明形参和实参名字可以不一样
#进入函数后的值
print('n1', n1)
print('n2', n2)
'''在函数调用过程当中,进行参数的传递
如果是不可变对象,在函数体的修改不会影响实参的值
如果是可变对象,那么则会影响实参的值
本例当中n1和n2分别是可变对象和不可变对象
对arg1的值修改为100,不会影响n1的值
对arg2的值修改,append(10),会影响到n2的值
'''

全局变量与局部变量

def fun():
    '''
    函数内部定义的变量如name为局部变量,
    若用global声明,则变为全局变量,
    全局变量在函数外部也可以使用
    '''
    global age
    name = '小黄'
    age = 23
fun()
#print('name=',name) #报错,'name' is not defined
print('age=',age)

3.4 函数的传参

在这里插入图片描述

def fun1(a,b,c):
    print('a=', a)
    print('b=', b)
    print('c=', c)
fun1(10,20,30)   #位置传参
lst = [1,2,3]
fun1(*lst) #在函数调用时,将列表中的每个元素转化为位置实参传入
fun1(a=100,b=200,c=300) #关键字传参
dic = {'a':11, 'b':22, 'c':33}
fun1(**dic) #在函数调用时,将字典中的每个元素转化为位置实参传入
fun1(-1,-2,c=-3)    #位置和关键字传参混合
'''需求:cd只能采用关键字实参传递'''
def fun2(a,b,*,c,d):
    #从*之后的参数,在函数调用时,只能采用关键字实参传递
    print('a=', a)
    print('b=', b)
    print('c=', c)
    print('d=', d)
'''函数定义时的形参的顺序问题'''
def fun3(a,b,*,c,d,**args):
    pass
def fun4(*args1, **args2):
    pass
def fun5(a,b = 10,*args1, **args2):
    pass

3.5 异常捕获

try-excep-else-finally结构
  这个结构主要用在可能出现异常的语句当中。若有多个except结构,捕获异常的顺序按照先子类后父类的顺序,为了避免遗漏可能出现的异常,可以在最后增加BaseException,当实际出现的异常不在列出的异常当中是,执行BaseException后面的语句。
  若try语句出错,执行except中的语句;try语句没有出错,则执行else中的语句。无论try语句是否出错,finally中的语句必定执行,常用来释放try块中申请的资源。

try:
    a = int(input('请输入第一个整数'))
    b = int(input('请输入第二个整数'))
    result = a/b
except ZeroDivisionError:
    print('对不起,除数不允许为0')
except ValueError:
    print('对不起,不能将字符串转换为数字')
except BaseException as e:
    print(e)
else:
    print('结果为:', result)
finally:
    print('谢谢您的使用!')

常见异常
在这里插入图片描述
traceback 打印输出异常:

import traceback    #导入包
try:
        print('-------------------')
        #这个横线有时候在上有时候在下,多运行几次就能发现。
        print(1/0)
except:
    traceback.print_exc()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

晚安66

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值