• python中的最最最基本语法(1)


    注意:对于我这个以前用c/c++的同学来说,可能一开始学习pyhon时有点不适应的,为什么呢?因为吧,python中,没有这玩意:{},也不用每句话才用分号分开的。python中通过缩进来分块的,一行占个句话就可以啦。下面的学习基于python2.7

    from __future__import division

    开始啦,边学习边作笔记

    参考http://www.liaoxuefeng.com/另外,还有其它的一些资料。

    基本输入输出语句print和raw_input():

    #输入语句:
    >>> print'100+100=%d' %(100+100)
    100+100=200
    
    #输出语句
    >>> name = raw_input('input your name:')
    input your name:yinheyi
    >>> print('hello,%s' %name)
    hello,yinheyi

    注意:raw_input()语句接收以后,默认保存为str格式哦,如果要比较大小的话,记得转为int类型。

    >>> number = raw_input('input a number:')
    input a number:12
    >>> type(number)
    <type 'str'>
    >>> number = int(raw_input('input a number:'))
    input a number:12
    >>> type(number)
    <type 'int'>

    判断与循环语句:

    判断语句:if…elif…else

    >>> if a>= 50:
    ...     print 'the number is big'
    ... elif a < 50:
    ...     print'the number is small'
    ... else:
    ...     print "i don't know"
    ... 
    the number is big

    循环语句: for…in

    >>> sum = 0
    >>> for number in range(101):
    ...     sum = sum + number
    ... 
    >>> print sum
    5050

    循环语句: while

    >>> sum = 0
    >>> n = 1
    >>> while n < 101:
    ...     sum = sum + n
    ...     n = n + 1
    ... 
    >>> print sum
    5050

    数据类型:列表、元组、字典、set

    list: Python内置的一种数据类型是列表。lists是一个有序的集合,可以添加与删除元素。

    生成它是用  []  就可以啦;

    调用它时,用下标调用就可以啦(从0开始);如第一个元素,list[0];倒数第一个,list[-1];

    可以用len()函数获得list元素的个数;

    在尾部添加用append(), 中间插入用insert();尾部删除用pop();指定位置删除为pop(i);

    #定义一个friends的列表
    >>> friends = ['xiaoming','ergou','sanmao']
    >>> friends
    ['xiaoming', 'ergou', 'sanmao']
    >>> friends[0]
    'xiaoming'
    >>> friends[-1]
    'sanmao'
    
    #添加与删除
    >>> friends.append('dapeng')
    >>> friends
    ['xiaoming', 'ergou', 'sanmao', 'dapeng']
    >>> friends.insert(0,'diyi')
    >>> friends
    ['diyi', 'xiaoming', 'ergou', 'sanmao', 'dapeng']
    
    >>> friends.pop()
    'dapeng'
    >>> friends
    ['diyi', 'xiaoming', 'ergou', 'sanmao']
    >>> friends.pop(2)
    'ergou'
    >>> friends
    ['diyi', 'xiaoming', 'sanmao']
    
    #替换
    >>> friends[0] = 'wangbadan'
    >>> friends
    ['wangbadan', 'xiaoming', 'sanmao']

    元组(tuple):tuple和list非常类似,但是tuple一旦初始化就不能修改。只要记住它不能修改就可以啦。很安全。

    用 () 定义啊。

    用下标调用,即tuple[1];

    注意:它定义一个元素的tuple时,一定要这样写,如:name = (‘yin’,), 千万别写成 name = (‘yin’);

    name = ('zhai','yin')
    >>> name
    ('zhai', 'yin')
    >>> name[0]
    'zhai'
    >>> name[-1]
    'yin'

    字典(dictionary):它就是键-值对。如在C++语言中为map的容器。它的特点就是可以快速查找,需要占用大量的内存,内存浪费多。通过key计算位置的算法称为哈希算法(Hash)。

    用 {} 定义dictionary哦;

    随着dictionary的增加,查找时间不会增加的。

    多次对一个key放入value,后面的值会把前面的值冲掉:

    可以用  ‘key’in dic 或 dic.get(‘key’)的方法来查看key是否存在。注意:dict提供的get方法,如果key不存在,可以返回None,或者自己指定的value,返回None的时候Python的交互式命令行不显示结果。

    删除用: pop(key)。添加时,直接用key值的索引添加就可以的。

    注意:ict内部存放的顺序和key放入的顺序是没有关系的。

    #定义一个dictionary;
    score = {'xiaoming':85,'xiaohong':62}
    >>> score
    {'xiaoming': 85, 'xiaohong': 62}
    
    #添加一个元素;
    >>> score['wangdan'] = 85
    >>> score
    {'xiaoming': 85, 'xiaohong': 62, 'wangdan': 85}
    
    #删除一个元素;
    >>> score.pop('xiaohong')
    62
    >>> score
    {'xiaoming': 85, 'wangdan': 85}
    
    #查看key是否存在;
    >>> 'xiaoming' in score
    True
    
    #查看一个key对应的值;
    >>> score.get('wangdan')
    不存在时,返回一个自定义的值;
    85>>> score.get('hehehe',-1)
    -1

    set:set和dict类似,也是一组key的集合,但不存储value。由于key不能重复,所以,在set中,没有重复的key。set和dict的唯一区别仅在于没有存储对应的value,但是,set的原理和dict一样,所以,同样不可以放入可变对象。

    要创建一个set,需要提供一个list作为输入集合:

    通过add(key)与remove(key)添加与删除元素;

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

    注意,传入的参数[1, 2, 3]是一个list,而显示的set([1, 2, 3])只是告诉你这个set内部有1,2,3这3个元素,显示的[]不表示这是一个list。

    重复元素在set中自动被过滤:

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

    添加与删除

    >>> s = set([1,2,3])
    >>> s
    set([1, 2, 3])
    >>> s.add('xiaoming')
    >>> s
    set([1, 2, 3, 'xiaoming'])
    >>> s.add(0)
    >>> s
    set([0, 1, 2, 3, 'xiaoming'])
    >>> s.remove(2)
    >>> s
    set([0, 1, 3, 'xiaoming'])

     

    一些高级操作:

    对于list与tuple的切片操作:

    如list[:5]或list[0:5]表示第0,1,2,3,4个索引值;当然也可以为负的如,list[-2:0]等于list[-2:]即倒数第2、倒数第1个数;也可以跳着来哦:list[1:10:2],表示步长为2的。

    list=range(100)
    #正着切片
    >>> list[:10]
    [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
    #负索引切片
     list[-10:]
    [90, 91, 92, 93, 94, 95, 96, 97, 98, 99]
    #倒着切片
    >>> list[10:0:-1]
    [10, 9, 8, 7, 6, 5, 4, 3, 2, 1]
    >>> list[-1:-10:-1]
    [99, 98, 97, 96, 95, 94, 93, 92, 91]
    #跳着切片
    >>> list[::10]
    [0, 10, 20, 30, 40, 50, 60, 70, 80, 90]
    #tuple的切片
    >>> (0, 1, 2, 3, 4, 5)[:3]
    (0, 1, 2)
    #字符串的切片
    >>> 'ABCDEFG'[:3]
    'ABC'
    >>> 'ABCDEFG'[::2]
    'ACEG'

    它的迭代:

    对于list、tuple还有字符串都可以用 for…in 进行迭代哦;

    而对于dictionary的话,也可以哦,只不过默认情况下,dict迭代的是key。如果要迭代value,可以用for value in d.itervalues(),如果要同时迭代key和value,可以用for k, v in d.iteritems()

    那么,如何判断一个对象是可迭代对象呢?方法是通过collections模块的Iterable类型判断:

    另外:Python内置的enumerate函数可以把一个list、tuple、字符串本身变成索引-元素对,这样就可以在for循环中同时迭代索引和元素本身:

    >>> from collections import Iterable
    >>> isinstance('abc', Iterable) # str是否可迭代
    True
    >>> isinstance([1,2,3], Iterable) # list是否可迭代
    True
    >>> isinstance(123, Iterable) # 整数是否可迭代
    False

    列表生成式:很牛逼很方便的;它是用来创建list的生成式;我们举例子看看哈:

    生成1-10的list:

    >>> range(1,11)
    [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

    生成 12、22、……102的list:

    >>> list = [x*x for x in range(1,11)]
    >>> list
    [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

    还可以再选择一下哦:

    >>> [x * x for x in range(1, 11)if x % 2 == 0]
    [4, 16, 36, 64, 100]

    还可以两层循环的:

    >>> [m + n for m in 'ABC' for n in 'XYZ']
    ['AX', 'AY', 'AZ', 'BX', 'BY', 'BZ', 'CX', 'CY', 'CZ']

    生成器:

    通过列表生成式,我们可以直接创建一个列表。但是,受到内存限制,列表容量肯定是有限的。而且,创建一个包含100万个元素的列表,不仅占用很大的存储空间,如果我们仅仅需要访问前面几个元素,那后面绝大多数元素占用的空间都白白浪费了。

    所以,如果列表元素可以按照某种算法推算出来,那我们是否可以在循环的过程中不断推算出后续的元素呢?这样就不必创建完整的list,从而节省大量的空间。在Python中,这种一边循环一边计算的机制,称为生成器(Generator)。

    创建方法1:第一种方法很简单,只要把一个列表生成式的[]改成(),就创建了一个generator:

    >>> L = [x * x for x in range(10)]
    >>> L
    [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
    >>> g = (x * x for x in range(10))
    >>> g
    <generator object <genexpr> at 0x104feab40>

    可以通过generator的.next()方法打印出来数据,另外也可以通过迭代哦,基本上我们都选择for…in迭代方法。

     

    创建方法2:通过特殊函数创建:如果一个函数定义中包含yield关键字,那么这个函数就不再是一个普通函数,而是一个generator。

    #这是函数,输出斐波那契数列
    def fib(max):
        n, a, b = 0, 0, 1
        while n < max:
            print b
            a, b = b, a + b
            n = n + 1
    
    #这是generator,也是生成斐波那契数列;
    def fib(max):
        n, a, b = 0, 0, 1
        while n < max:
            yield b
            a, b = b, a + b
            n = n + 1

     

    注意:这里,最难理解的就是generator和函数的执行流程不一样。函数是顺序执行,遇到return语句或者最后一行函数语句就返回。而变成generator的函数,在每次调用next()的时候执行,遇到yield语句返回,再次执行时从上次返回的yield语句处继续执行。

    >>> def odd():
    ...     print 'step 1'
    ...     yield 1
    ...     print 'step 2'
    ...     yield 3
    ...     print 'step 3'
    ...     yield 5
    ...
    >>> o = odd()
    >>> o.next()
    step 1
    1
    >>> o.next()
    step 2
    3
    >>> o.next()
    step 3
    5
    >>> o.next()
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    StopIteration

     

    最后,如果你觉得以上内容对你有帮助,作为回报,那就可以打赏一下我这个穷学生吧,以资助我买几本书。

    钱也不用太多,您可以选择:2毛,5毛、1元。

    如果对你没有帮助,那就算了。

    未标题-2

  • 相关阅读:
    maven打包出错: Failed to clean project: Failed to delete
    Image.Save()发生“GDI+ 中发生一般性错误”
    Vue.js——60分钟快速入门
    PHP-输入变量
    ThinkPHP框架开发的应用的标准执行流程
    ThinkPHP 3.2.2 在 volist 多重循环嵌套中使用 if 判断标签
    ThinkPHP 数据库操作之数据表模型和基础模型 ( Model )
    Namespace declaration statement has to be the very first statement in the script
    ThinkPHP 学习笔记 ( 一 ) 项目部署:应用部署方式与模块分组部署方式
    ThinkPHP 3.2.3 简单后台模块开发(一)常用配置
  • 原文地址:https://www.cnblogs.com/yinheyi/p/6033405.html
Copyright © 2020-2023  润新知