python学习

一、PYTHON中的元素

注意:python中是区分大小写的,不管是变量、函数、还是类,都要严格的区分大小写。

1.基本元素

  • 运算符: + - * / %等等
  1. 除法:
    " / " 表示浮点数除法,返回浮点结果;
    " // " 表示整数除法,返回不大于结果的一个最大的整数
  • 运算顺序:先乘除 再加减 括号最优先
  • 变量:就是一个标签:,由非数字开头的字母、数字、下划线组成,它的内容可以是数值、字符串、列表、元组和字典。
  • 数值,就是数字。如a = 100
  • 字符串,就是用一对双引号、或单引号引起来的内容,只要被引号引起来,就是字符串了。    

如: b = ”Hello World”
100是数值,而 ”100”是字符串。      

  • 转义字符

\t 表示 tab                    \n 表示 换行

  • %s 占位,用%后的变量替换

如:
a = 100
b = ” HelloWorld ”
print (” point = %s \n \" %s   \"   ”  %(a, b)  )
打印出:
point=100
"HelloWorld"

2.列表

例如:

c = [1,2,3,4,5,6,7] 
d = [”张三”,”李四”,”王五”]  
e =[1,2,3,”4”,”5”,d]

  • 用 列表名[索引号] 索引列表中的元素    

d[0]表示列表d中的第1个元素“张三”

  • 用列表名[起 : 止]表示切片,从列表中切出相应的元素 前闭后开

c[0:2] 切出 [1,2]
c[ : ] 切出[1,2,3,4,5,6,7] 

  • 用列表名[起 : 止: 步长] 带步长的切片,步长有方向。

如c = [1,2,3,4,5,6,7] ,若切出 [5,4,3,2] 用c[4 :0 :-1]  ; 切出[5,4,3,2,1]用 c[4 ::-1] ;切出 [6,4,2] 用 c[-2 ::-2]; 从倒数第二个开始一直切到头,步长-2

  • 修改:列表名 [ 索引号 ] = 新值
  • 删除:del 列表名[ 索引号 ]  
  • 插入: 列表名.insert(插入位置索引号,新元素)

3.元组

一旦定义不能改变

f=(1,2,3)

4.字典

  • 字典里放着 {键:值, 键:值, 键:值} n 个键值对

   dic={1:”123”,”name”:”zhangsan”,”height”:180}

  • 用字典名[ 键 ] 索引字典中的值    

  dic[”name”] 表示字典dic 中键”name”对应的值”zhangsan”

  • 修改:字典名 [ 键 ] = 新值
  • 删除:del 字典名[ 键 ]  
  • 插入:字典名[ 新键 ] = 新值

二、python语法

 Python 代码是使用四个空格的缩进表示层次关系的

基本描述

  • 条件语句
  1. 一般用法
    例如:
    if a==1:
         print(a)
    else:
         pass                        # pass指不做任何处理
  2. 有多个判断条件时
    例如:
    if a==1 or b==1:           # 用 or 和 and 连接
          print(a)
    else
          pass
  • 循环语句
  1. for 变量 in range (开始值,结束值)       例如:
     
  2. for 变量 in 列表名    如:
    M = ['a', 'p', 'o']
    for i in M:
  3. while   条件   :
  4. 终止循环用 break

函数

函数的使用

  1. 函数(function):组织好的,可重复使用的,用来实现单一或相关联功能的代码段。
    比如input()就是一个函数,可以直接使用函数,不用每次重新定义如何从控制台接收输入,所以函数是帮助实现代码复用的。

  2. 定义函数:def    函数名   (参数表):
                          函 数 体 括号里的参数如果不需要可以为空

  3. 使用函数:函数名 (参数表)   

    如 :input("please input your class number:")
    定义:def hi_name(yourname):
                      print ”Hello %s”%yourname
    使用:hi_name(”zhangsan”)
    会输出:Hello zhangsan
  4. 函数返回值: return  
         def add(a,b):
               return a+b
         c=add(5,6)               # c 被赋值为 add的返回值 11 
  5. 内建函数:python解释器自带的函数
    如:abs(-10) 返 回 10 

    具体参见:python——一些标准函数库和变量的记录_KGback的博客-CSDN博客

一些特殊函数

isinstance(a,b)

判断第一个参数的类型是否是第二个参数
python基础:isinstance的使用细节,以及常用类型判断所使用的包-CSDN博客

模块

模块(module):是一个 Python 文件,以.py 结尾,包含了 Python 函数等语句。先导入,再使用,用模块.函数名调用。

例如1:
import time
time.asctime ( )
输出:'Tue Jan 1621:51:06 2018'

例如2:
import turtle # 导入 turtle 模 块
t = turtle.Pen ( ) #用 turtle 模块中的 Pen 类,实例化出一个叫做 t 的对象
t.forward (像素点)  #让 t 向前走多少个像素点
t.backward (像素点)  #让 t 向前走多少个像素点t.left (角度)         #让 t 左转多少角度 t.right (角度)        #让 t 右转多少角度t.reset ( ) # 让 t 复 位

package包

包含有多个模块,如:from PIL import Image

  • 变量作用域

局部变量:在函数中定义的变量,只在函数中存在,函数执行结束不可再用。全局变量,在函数前定义的变量,一般在整个代码最前面定义,全局可用。

三、类、对象和面向对象的编程

类(class)用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。对象是类的实例。物以类聚人以群分,类是可实例化出对象的模具。

对象:是类实例化出的实体,对象实实在在存在,完成具体工作。

面向对象:程序员反复修改优化类,类实例化出对象,对象调用类里的函数执行具体的操作。

上面的类是下面类的父类;下面类是上面类的子类,子类实例化出来的对象,可以使用自身和父类的函数与变量

2.1 类的使用

2.1.1 定义

class 类名 (父类名) : 
      pass

如果有父类,写在类名后面的括号里;如果没有父类,可以不写括号了。用关键词 pass 占个位置,之后再用具体函数把类补充完整。 

举例:classAnimals:
       pass
classMammals(Animals):
       pass
classCats(Mammals):
       pass

  • 类里定义函数时,语法规定第一个参数必须是 self 。
  • init__函数,在新对象实例化时会自动运行,用于给新对象赋初值。

2.1.2 类的实例化

通过类的实例化描述对象: 对象 = 类()  如:t = turtle.Pen()

(1)将猫类实例化出一个叫 kitty 的对象,kitty 有自己的特征属性,比如身上有 10 个斑点:
kitty = Cats(10)        #实例化时运行  init 函数,给 spots 赋值,告知 kitty 有 10 个斑点
print”kitty.spots” #打印出 10
(2)kitty 可以做具体的工作,比如捉老鼠:
kitty.catch_mouse()#对象运行函数,必须用对象.函数名,调用类里的函数
                    #会运行 print ”catch mouse” 故打印出catch mouse

  • 对象调用类里的函数,用对象.函数名
    对象调用类里的变量,用对象.变量名
  • 类内定义函数时,如调用自身或父类的函数与变量,须用self.引导, 应写为 self.函数名self.变量名

代码验证:



2.1.3 class中的符号属性

Python 中虽然没有访问控制的关键字,例如 private、protected 等等。但是,在Python 编码中,有一些约定来进行访问控制。

单下划线、双下划线、头尾双下划线说明: 

_foo: 以单下划线开头的表示的是 protected 类型的变量,即保护类型只能允许其本身与子类进行访问,不能用于 frommodule import *

__foo:双下划线的表示的是私有类型(private)的变量, 只能是允许这个类本身进行访问了。

  _foo__: 头尾双下划线定义的是特列方法,类似init() 之类的。

一些用法解释

nn中自动调用forward函数:

pytorch中的forward函数详细理解_pytorch forward函数-CSDN博客

四、文件操作

可参见链接:Python 文件I/O | 菜鸟教程

  • 文件写操作

import pickle

开:文件变量= open(”文件路径文件名”, ”wb”)
存:pickle.dump(待写入的变量,文件变量)
关:文件变量.close()     

代码验证:          

  • 文件读操作

import pickle

开:文件变量= open(”文件路径文件名”, ”rb”)
取:放内容的变量 =pickle.load(文件变量)
关:文件变量.close()                      

代码验证:

五、编程中的一些问题

1. 编程策略方法

  • 全局变量自增自减的问题

目标是实现一个全局累加的功能,但python中没有static类型,调用全局变量老出错,最后通过在另一个py文件中定义该全局变量,本py文件中叫用该变量实现自增自检。
参考链接:https://www.jb51.net/article/154501.htm

  • 无符号数和有符号数的计算

在python中,不能进行有符号数和无符号数相加;如果要进行此类操作,可以先将有符号数转换为无符号数,再进行操作,因为无论一个数是有符号数还是无符号数,在计算机中存储均是一样的。

例如,一个int8类型的0减去15的八位二进制数和一个uint8类型的0减去15的八位二进制数在计算机中存储均是一样的,虽然实际中第一个值为-15,第二个值为241。也就是说任意一个数和和这个二进制数相加、减、乘等出来的二进制结果都是一样的,不一样的只是由于最终对这个数类型定义不一样而导致的人为的认定结果不一样。

  • 大数计算

python自带的int类型的数可以表示较大的数,在调用numpy等计算库时,注意计算时数据类型会自动发生变化。因此在计算大数时注意,将各数转换为python自带的int类型。

例如a为np.uint64类型,b为int类型,若a和b均为较大的值,即a+b的结果大于np.uint64的范围,a+b的结果会被强制转换为np.float64类型。

  • 字符转数值

参考链接:Python输出16进制不带0x补零,整数转16进制,字符串转16进制 - 学为所用 - 博客园

 2. error

  1. UnboundLocalError: local variable 'vd' referenced before assignment

    意思是是函数返回的值在函数中没有被赋值,出现该问题大概率是if...else...中返回值的赋值没有执行到。
  2. OverflowError: Python int too large to convert to C long

    溢出错误,有可能是因为一个numpy.uint64和一个numpy.uint8类型的数相加,结果值被自动定义为numpy.uint8类型,结果就溢出了
  3. TypeError: ufunc 'right_shift' not supported for the input types, and the inputs could not be safely coerced to any supported types according to the casting rule ''safe''

    操作符两边数据类型不一样,应将源操作数的类型强制转成一样

评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

KGback

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

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

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

打赏作者

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

抵扣说明:

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

余额充值