zoukankan      html  css  js  c++  java
  • Python学习:基本概念

    Python学习:基本概念

    一,python的特点:

    1,python应用场景多;爬虫,网站,数据挖掘,可视化演示。

    2,python运行速度慢,但如果CPU够强,这差距并不明显。

    3,严格的缩进式编程

    二,python输入

    1,print 'hello world',‘Dr’ (中文:# -*- coding: utf-8 -*-申明)

    2,raw_input('input:')

    三,数据类型

    1,类型显示:type() ,数值型和字符型都是不变量

    2,转义: 或r(不转义)

    3,布尔类型:and,or,not

    4,python 变量是动态变量即:变量所指向类型可变(a=1 a='str'),而Java是静态变量

    5,常量

    6,字符串编码:ASCLL,Unicode,UTF-8

    ASCLL对应一个字节,Unicode对应两个字节,而UTF-8将英文字母被编码成1个字节,汉字通常是3个字节

    7,字符串格式化输出  %d %f %s

    'Hello, %s' % 'world'

    8,集合

    1,list用法:  list=[1,2,3] (可变性)

    2,tuple元组:t=(1,2,3)   (因为tuple不可变:每个元素,指向永远不变,但指向的对象可变,所以代码更安全)

    3,dict:  d={'Bob':15,'John':14}  相当与map,key为不可变量,dict是用空间来换取时间的一种方法

    4,set:  set=([1,2,3]) 

    也是一组key的集合,但不存储value。由于key不能重复,所以,在set中,没有重复的key。

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

    9,语句

    条件: if  age>14: elif:  else:

    循环: for num in range(14):  表示(0到13之间的数)

    10,函数

    1,如果想定义一个什么事也不做的空函数,可以用pass语句,缺少了pass,代码运行就会有语法错误。

    2,函数返回:return a 或return a,b,函数执行完毕也没有return语句时,自动return None

    3,函数默认参数:def mypow(x,n=2)  调用pow(2) 即可

    一是必选参数在前,默认参数在后,否则Python的解释器会报错;

    二是:def enroll(name, gender, age=6, city='Beijing'):  调用:enroll('Bob', 'M', 7)或enroll('Adam', 'M', city='Tianjin')都可以

    4,可变参数:参数用list或tuple,可变参数允许你传入0个或任意个参数

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

    def person(name, age, **kw):
        print 'name:', name, 'age:', age, 'other:', kw
    >>> kw = {'city': 'Beijing', 'job': 'Engineer'}
    >>> person('Jack', 24, **kw)
    name: Jack age: 24 other: {'city': 'Beijing', 'job': 'Engineer'}

    6,参数定义的顺序必须是:必选参数、默认参数、可变参数和关键字参数。

    组合用例:

    def person(name,age=3,*p,**kw):
            print 'name',name,'age',age,'p=',p,'kw=',kw
    >>> p=[1,2,3]
    >>> kw={'city':'BJ','love':'dog'}
    >>>person('Dr',age,*p,**kw)//注意TypeError: person() keywords must be strings  kw的key值只允许value

    7,递归函数

    问题:递归层次过深容易出现栈溢出,解决递归调用栈溢出的方法是通过尾递归优化,事实上尾递归和循环的效果是一样的,所以,把循环看成是一种特殊的尾递归函数也是可以的。

    尾递归是指,在函数返回的时候,调用自身本身,并且,return语句不能包含表达式。这样,编译器或者解释器就可以把尾递归做优化,使递归本身无论调用多少次,都只占用一个栈帧,不会出现栈溢出的情况。

    如下所示:

    def fact(n):
        return fact_iter(n, 1)
    
    def fact_iter(num, product):
        if num == 1:
            return product
        return fact_iter(num - 1, num * product)
    /*result
    ===> fact_iter(5, 1)
    ===> fact_iter(4, 5)
    ===> fact_iter(3, 20)
    ===> fact_iter(2, 60)
    ===> fact_iter(1, 120)
    ===> 120
    */
    /*普通递归*/
    ===> fact(5)
    ===> 5 * fact(4)
    ===> 5 * (4 * fact(3))
    ===> 5 * (4 * (3 * fact(2)))
    ===> 5 * (4 * (3 * (2 * fact(1))))
    ===> 5 * (4 * (3 * (2 * 1)))
    ===> 5 * (4 * (3 * 2))
    ===> 5 * (4 * 6)
    ===> 5 * 24
    ===> 120

    三:参考文献:

      1,廖雪峰官方网址

     
  • 相关阅读:
    冒泡排序
    数据结构和算法关系
    js获取ifram对象
    java STL
    bufferedReader 乱码问题
    css animation让图标不断旋转
    apply通过实例理解
    jquery.ajaxfileupload.js
    JDBC getMetaData将结果集组装到List
    Android开发之使用BaseAdapter的notifyDataSetChanged()无法更新列表
  • 原文地址:https://www.cnblogs.com/ksWorld/p/7016530.html
Copyright © 2011-2022 走看看