python学习笔记[0]_weiyuan2011的博客-程序员秘密

技术标签: python  基础学习  Python  

(刚过了元旦,开启14年新篇章。。。今天看到一句话:一个程序员除了熟练掌握一门静态语言外至少需掌握一门脚本语言,还好我看到的不算迟,一直想学python,就从现在开始吧~)

首先,罗列一下python的解释

【1】Python是一个面向对象开发语言,大部分情况下被用来作脚本的开发,所以也有一大部分的人说他是脚本语言
【2】Python的优点:

       高质量
       高效率————不用像C C++静态语言一样,进行编译连接,直接可以运行
       可移植————适用于各种平台linux windows Mac Unix android等,可直接将这个平台的程序拷贝到另一个平台运行
       很多可用的组件
【3】Python的缺点:因为他不会编译生成二进制文件,也就是计算机底层文件,所以运行速度较之C C++稍逊色
【4】Python可以用来干什么?
              可以说Python无所不能,涉及领域有网页、游戏、图像、人工智能等

好了,正式拉开学习帷幕:

备注:我是用《Python学习手册》第四版学习的,同时参考http://blog.csdn.net/ithomer/article/details/8907268#python文章进行学习的,下面的页码是书中页码,为了方便我下次看时能找得到地方;EX:/ex:表示举例;Tips:表示一个标记】

1.P95 用input()来使程序暂停
2.P124 类型
       1)数字:
       Python支持类型扩展  例如计算2的100次方时,在C++中没有一个类型可以容下这个结果1267650600228229401496703205376,而python会自动提供较大的精度,以适用于较大数值
       可以引入math模块,import math,就像包含了一个数学库一样,你可以使用模块中的常量方法等   例如 PI  sqrt(9)
       2)字符串:'spam’
       所支持的方法:len();
                                   []索引           //可以正向也可以反向索引         ex:s = 'spam',s[0]——'s',s[-1]——s[len(s)-1]等于'm'
                                   分片操作(抽离操作):slice  s[1:3] 从字符串偏移量为1的位置开始到但不包括偏移量为3的位置的字符提取出来组成一个新字符串并返回,即返回‘pa’ex2:s[1]  'pam'  s[-1] 'spa'
                                  +合并:s+'aaa'   'spamaaa'
                                  *n      :重复n遍   s*3  'spamspamspam'
              ___________________________________

以上方法均为序列式类型变量通用方法,下面几个是字符串特定方法,注意所有对字符串进行的操作都不会改变原字符串,而是返回一个新字符串
              len()
              find()
              replace('pa','XYZ')
              split(',')   将一个字符串以','分割开来 ex: line = 'aaa,bbb,ccc';line.split(',');返回一个数组['aaa','bbb','ccc']
              upper(s)     将字符串s变大写
              ......还有多如牛毛的方法来操作字符串,具体请看帮助 dir(line) 可以看到字符串所支持的方法,help(line.upper) 可看到字符串upper方法的帮助  注:line为字符串类型变量P129
             Tips: python支持将三个引号(单引号 双引号都可以)内的多行字符合并在一起,并为每一行末添加一个'\n' 
                ex: s = """aaaaa
                  '''bbb"bb
                  "ccc"""
                  printf(s) 输出'\naaaaa\n\'\'\'bbb\"bb\n\"ccc'
        3)序列:类似于数组,但区别是不限类型(即一个序列中可存放一种以上不同类型元素),且大小像vector一样可动态变化
         除了上面字符串支持的基本序列操作,它还支持其他操作:
         L = ['aaa',123,1.2]
         L.append('www')     ['aaa',123,1.2,'www']  增加元素
         L.pop(2)            ['aaa',123,'www']      删除元素    TIPS :不同于字符串,这些操作都会改变原对象,
         L = [4,3,0,9]
         L.sort()            [0,3,4,9]
         L.reverse()
         利用序列可以描述矩阵 :array = [[1,2,3],[4,5,6],[7,8,9]]
         Tips1:array   输出整个矩阵     array[0]  输出0行  array[0][1]输出元素2
         Tips2:>>> col2 = [row[1] for row in array]
                    >>> print(col2)
                    [2, 5, 8]
                    >>> col2 = [row[1]+1 for row in array]   //对所取出的第一列元素值都+1
                    >>> print(col2)
                   [3, 6, 9]
                   >>> print(array)
                   [[1, 2, 3], [4, 5, 6], [7, 8, 9]]  //发现并没有改变原矩阵
   Tips3:  >>> X = [array[i][i] for i in [0,1,2]]
                >>> print(X)
                [1, 5, 9]
               //利用循环变量
                EX:>>> X = [c*2 for c in 'spam']
                        >>> print(X)
                         ['ss', 'pp', 'aa', 'mm']
  Tips:range(n)可以生成n个元素的序列,这个表的元素都是整数,从0开始,下一个元素比前一个大1, 直到函数中所写的上限 (不包括该上限本身)
             EX:>>> M=range(5)
             >>> M
             [0, 1, 2, 3, 4]
 4)字典:类似于map,不拘泥于类型   {键:值}
                >>> M ={'name':'wyy','year':21,'sex':'Female'}
                >>> print(M)
               {'sex': 'Female', 'name': 'wyy', 'year': 21}
              ※字典中的元素是无序的,你不能通过下标来获取元素,而只能通过key

    >>> M['name']
    'wyy'
    EX:  按键值排序  字典不支持sort函数,我们得这样用for循环输出某序元素
     >>> M = {'a':1,'b':3,'c':4}//一个字典
     >>> print(M)
    {'a': 1, 'c': 4, 'b': 3}//打印出的结果并不是按照我们输入的顺序而来,键是无序的
     >>> l = list(M)//取出字典的键成为一个序列
     >>> l
    ['a', 'c', 'b']
    >>> l.sort()//対键进行排序
     >>> print(l)
   ['a', 'b', 'c']
   >>> for key in l:
   print(key,'=>',M[key])//按序列l的顺序循环输出字典

 
   ('a', '=>', 1)
   ('b', '=>', 3)
   ('c', '=>', 4)


   ※字典支持用新key进行扩展,但不允许对没有的值进行访问
     EX: >>> M = {'a':1,'b':2,'c':3}
   >>> M
   {'a': 1, 'c': 3, 'b': 2}
   >>> M['e'] = 4
   >>> M
   {'a': 1, 'c': 3, 'b': 2, 'e': 4}
 ※Tips循环遍历字典  for key in M:
      print M[key]
 ※字典支持的其他方法
  M.keys()    返回所有键
  M.values()  返回所有值
  M.items()   返回所有的元素
  M.clear()   清空字典 
  len(M)       多少对    
 5)元组————元组中的内容不可变是const


--------------------------------------------------------------------------------------------

【备注:以下内容是学习http://blog.csdn.net/ithomer/article/details/8907268#python所写下的笔记】
1.函数的定义:
   def function_name(a,b,c):
    statement
    return something  # return不是必须的
   
    EX:
>>> a = 1
>>> b= 2
>>> def func(a,b):
 return a+b

>>>
>>> print(func(3,4))
7
  基本数据类型的参数:值传递

  表作为参数:指针传递
  return 可以返回多个值   EX: >>> def func(a,b):
                                                        c = a+b
                                                        return a,b,c

                                                       >>> print func(2,3)
                                                      (2, 3, 5)
2.Python中类的定义:
   EX:

class Bird(object):
 have_feather = True
 way_to_birth = 'agg'
 //定义方法
 >>> class Bird(object):
 def move(self,dx,dy):                                       //这里的self相当于this指针,在函数定义时要写出,但是在调用时不用写出
  pos = [0,0]
  pos[0] = pos[0]+dx
  pos[1] = pos[1] + dy
  return pos

 

 
 //定义对象
 mBird = Bird()
// 引用属性:

print mBird.have_feather
 //引用方法
 >>> mBird.move(3,4)
 [3, 4]
 //继承:

  class Chicken(Bird):
   can_fly = False
 >>> mChicken = Chicken()
  >>> print(mChicken.can_fly)


 

3.入门教程9
  最好不要通过类方法修改类属性,因为如果一修改,所有对象的这个属性都会被修改,这个属性就相当于C++中static属性 所有对象只有一份,但不包括mutable类型的变量,EX:数字,字符串,因为这些类型会为每个对象复制一份,就像你写了一个函数,对这个外部变量进行修改,实质上是没有修改原变量只是修改其副本
  EX:

 >>> class Base(object):
 Age = 0
 List= ["yellow","Red"]
 
 >>> a1 = Base()
 >>> a2 = Base()
 >>> a1.Age = 3//修改类属性Age
 >>> a1.Age
 3             //a1的Age属性变化
 >>> a2.Age
 0             //a2没变化     因为数字类型是mutable的,每一个对象会复制出一份
 //修改不可变类型变量
 >>> a1.List[0] = "Blue"
 >>> a1.List
 ['Blue', 'Red']//改变
 >>> a2.List
 ['Blue', 'Red']//改变
4.入门教程9 类的构造函数
  __init__(self,parameter):
        EX:>>> class Base(object):
 Age = 0
 List= ["yellow","Red"]
 def __init__(self,keys):
  print("my key :",keys)

  
 >>> a = Base(4)
 ('my key :', 4)//__init__方法在创建对象时自动被调用



5.入门教程9             对象的私有属性,属于对象本身,每个对象式独立的  self.attribution
 

EX:>>> class Base(object):
 def __init__(self,keys):
  self.key = keys
 def func(self):
  for i in range(len(self.key))://Tips:注意这里list的遍历
   self.key[i] = self.key[i]+1//改变每个对象的key,

   
 >>> a = Base([1,2,3,4])
 >>> a.func()
 >>> a.key
 [2, 3, 4, 5]
 >>> b = Base([7,8,9,0])
 >>> b.func()
 >>> b.key
 [8, 9, 10, 1]  //各对象不一样

 
 再次强调对象属性与类属性的区别
6.进阶02      文件的输入与输出
 ※创建文件对象   f.open(文件名,模式)  模式简单包含“r”只读 “W”写入 a追加至末尾???至今仍有疑问,python同时读写怎么有异常,没弄懂(说是跟一个+号就支持读写同步)
 ※文件读取 
 str = f.read(N)  读取N字节
 str = f.readline() 读取一行
 str = f.readlines()读取所有   将读取结果存入一个序列
 EX: f = open("D:\\TTT.txt","r")
  >>> content = f.readlines()
  >>> content
  ['54321\n', '67890\n', '09876']
7.进阶3 模块module  
 引入模块 import script1  (script1是另一个python文件script.py) 相当于C++中引入另一个库文件#include  <*.h>  完了可以使用库中的方法变量
 不同的是Python中使用模块中的属性时要写成script.attribution 
 EX: //script1.py
  def laugh():
      print("hahahaha")
          //script2.py
           import script1

  for i in range(2):
      script1.laugh()//引用模块script1的属性laugh()
     搜索模块路径:
     当前文件夹 -> 操作系统环境变量PYTHONPATH设置路径 ——> 标准库的安装路径
     
     Tips:如果好几个模块都是一个作用可以将它们放在同一个文件夹下(如:D:\\Test),通过
     import D:\\Test.script1引入
           注意:在此文件夹下必须有一个__init__.py文件,以提醒python这个文件夹是一个模块包,(该文件是一个空文件而已)
8.进阶4 函数参数传递
 1)位置传递      与函数定义时参数的位置一一对应传入参数
 2)关键字传递  调用函数时在参数列表对参数进行赋值  
   EX:>>> def func(a,b,c):
    print a
    print b
    print c

 
             >>> func(a = 0,c =9,b = 8)
    0
    8
    9
 3)参数默认值
 4)包裹位置与包裹关键字     适用于某个功能的函数,你无法确定他具体传入几个参数,有时只传一个,有时传两个以上
     包裹位置:传参数时只传入具体值   用序列接收
      EX:>>> def func(*list):  //※为了标识list是一个序列,收集了很多参数,给list前加*
    for i in range(len(list)):
    print (list[i])

  
       >>> func(1,2,3,4,5,6)
    1
    2
    3
    4
    5
    6
  包裹关键字:传参数时传入对参数列表的赋值  用字典接收
    EX:>>> def func(**map):  //※为了标识map是字典,用**进行标识
    print type(map)
    print map

 
       >>> func(a=1,b=0,c="hello")
    <type 'dict'>
    {'a': 1, 'c': 'hello', 'b': 0}
 5)解包裹     用于传递参数,就是将要传递的参数封装在了list或字典中,用解包裹的形式传递给函数进行函数调用
   EX:>>> def func(a,b,c):
    print a,b,c
    >>> m=[1,2,3]
    >>> func(*m)//解包裹
    1 2 3
   Tips:如果m的元素数大于参数列表的个数  就会报错
   同理,也有下面样子:
   >>> dict={'a':1,'b':2,'c':3}
   >>> func(**dict) //解包裹
   1 2 3

 

未完,待续........

 

                                                                                   【热爱工作,热爱生活】

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weiyuan2011/article/details/18002281

智能推荐

uni-app - 检查机型是否为刘海屏(如iPhone X)_王佳斌的博客-程序员秘密

前言有时候,普通机型的界面,到刘海屏上就会有问题,尤其是顶部最容易出问题。如果知道了是否是刘海屏,那么我们可以动态设置一些 css 属性,来兼容样式。实现利用 5+ API 可查询当前设备是否为刘海屏。plus.navigator.hasNotchInScreen()返回值为 Boolean演示可在 onShow() 生命周期函数中直接判断:if(plus.navigator.hasNotchInScreen()){ // 刘海屏执行的逻辑}else{ //非刘海屏 }

重庆北大青鸟【学员心声】:在反思性学习中获得成长 --J14班 万*同学_cqbdqn1的博客-程序员秘密

学习的途中,我们需要偶尔停下脚步,回头看下自己的学习历程,总结自己的不足和经验,在学习中提升,在反思中成长。重庆北大青鸟解放碑校区—J11班 万*同学经过了大半年的学习,学到了很多知识,也了解这个行业的大概状况,经过了各个阶段的测试,深感自己的学习有很大的问题,自己的学习方法也不适合。自己学习的知识点,在老师上课的时候感觉还是能跟上的,但是下来变了个样,又感觉很吃力了。还是自己学习方式有问题...

视频编解码及H264技术_行知致简的博客-程序员秘密

【H.264/AVC视频编解码技术详解】一. 视频信息与压缩编码2016年07月31日 21:30:02取次花丛懒回顾阅读数 7460更多分类专栏:视频编解码先进视频压缩编码(Advanced Video Coding, H.264/AVC)版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。本文链接:https://bl...

Centos 7.2安装git和卸载git_AlvesWeiDong的博客-程序员秘密

Centos安装git和卸载git 可以使用whereis git等命令来检查是否已经安装了git版本的我是用git --version检测到我的环境自带的git版本是1.7不能满足条件,所以要先卸载低版本的git。使用命令:yum remove git卸载git我搭建的环境有centos6.5和centos7.1两个,都进行了安装。首先要下载一个git的tar.gz包,进...

FM 与 AM的区别_fm和m换了_平平谈谈才是真的博客-程序员秘密

在一般的收音机或收录音机上都有AM及FM波段,相信大家已经熟悉,这两个波段是用来供您收听国内广播的,若收音机上还有SW波段时,那么除了国内短波电台之外,您还可以收听到世界各国的广播电台节目。为了让您对收音机的使用有更进一步的认识,以下就什么是AM、FM、SW、LW作一简单的说明。 事实上AM及FM指的是无线电学上的二种不同调制方式。AM: Amplitude Modulation称为调幅,而FM: Frequency Modulation称为调频。只是一般中波广播(MW: Medium Wave)采用了

随便推点

基于SIM300和S3C2410的短信收发问题-3_梦幻骑士syc的博客-程序员秘密

基于SIM300和S3C2410的短信收发问题-3对AT指令组织应用的小小认识,最关键的地方其实不在这个指令,而是对串口的操作,串口真的是挺伟大的东西。。。我认为。。。 接着上篇的AT指令,下面列一张我整理的表格: 执行指令 描述 反馈 ATD 拨号命令。这个命令用来设置通话、数据或传真呼叫。 如果没有拨号音

基础算法一之高精度运算_jayvee_的博客-程序员秘密

高精度加法#include &lt;iostream&gt;#include &lt;cmath&gt;#include &lt;string&gt;#include &lt;vector&gt;using namespace std;vector&lt;int&gt; add(vector&lt;int&gt; &amp;A, vector&lt;int&gt; &amp;B){ vector&lt;int&gt; C; if(A.size() &lt; B.size())

HttpClient in .net Framework 4.5_zhleiyang的博客-程序员秘密

转自书:C# 5.0 IN A NUTSHELL (待翻译)HttpClientHttpClient is new to Framework 4.5 and provides another layer on top ofHttpWebRequest and HttpWebResponse. It was written in response to the growth

【Java面试题】17 如何把一个逗号分隔的字符串转换为数组? 关于String类中split方法的使用,超级详细!!!..._weixin_30851409的博客-程序员秘密

split 方法:将一个字符串分割为子字符串,然后将结果作为字符串数组返回。stringObj.split([separator],[limit])参数:stringObj必选项。要被分解的 String 对象或文字。该对象不会被 split 方法修改。separator 可选项。字符串或 正则表达式 对象,它标识了分隔字符串时使用的是一个还是多个字符。如果忽略该选项,返回包含整个字...

Github:将近4万Star的Java、Python面试指南献给大家!_githubshareing的博客-程序员秘密

Flutter for webFlutter for Web 是 Flutter 的代码兼容( code-compatible)实现版本,使用基于标准的Web 技术(HTML, CSS 和 JavaScript)进行渲染。通过 Flutter for web,可以将 Dart 编写的 Flutter 代码编译成嵌入到浏览器并部署到任何 Web 服务器的客户端版本(client experienc...

python中math库的常用方法_python中math模块常用的方法整理_weixin_39569894的博客-程序员秘密

ceil:取大于等于x的最小的整数值,如果x是一个整数,则返回xcopysign:把y的正负号加到x前面,可以使用0cos:求x的余弦,x必须是弧度degrees:把x从弧度转换成角度e:表示一个常量exp:返回math.e,也就是2.71828的x次方expm1:返回math.e的x(其值为2.71828)次方的值减1fabs:返回x的绝对值floor:取小于等于x的最大的整数值,如果x是一个整...

推荐文章

热门文章

相关标签