zoukankan      html  css  js  c++  java
  • python基础

    运算

    //是下取整
    py的浮点数也没有大小限制,但是超出一定范围就直接表示为inf

    条件语句与循环

    if xxx:, elif:, else:, 'for x in xxx:' , 'while xxx:` 都和c一致

    for else语法

    for xx in xx:
        blabla
    else:
        blabla
    

    是指假如循环没有被中途break出来,整个循环结束后进行什么。
    这感觉还是挺常用的,不需要在进循环之前定义一个flag然后出来之后if flag之类的

    数据类型

    存储地址

    获取地址id(...),如果重了变量名就不能用了

    对于简单类型,如int,float
    在比较小范围[-5,256]的整数已提前存放于内存中,无论多少次重启地址都不变
    其余的比如你重复调用id(1.1)是不会变的,但如果你执行a=1.1,再调用id(1.1)就会出现不同的结果
    id(a)为最初的地址,下一次赋值b=1.1id(b)就会变成第二种id(1.1)然后再调用id(1.1)又变成了另一个值
    由于类型简单,不用担心说a=1, b=a, b=123456之后a改变,因为b=123456相当于获取了新地址

    而像list,set,dict这种.a=[1,2], b=a, b[0]=3是会改变的
    本质上b[0]访问的是a里的东西,改变了b[0]的地址,而a,b的地址仍然和最初的a一样
    而前面b=123456不会改a,是因为改的不是b的内部变量。
    也就是说,如果写a=[1,2], b=a, b=[2,3]这样子,a是不会改变的。
    python中=只是取地址。 b=a.copy()才是真正复制两份

    函数传参时,传的也是引用, 返回值也是引用, 也会出现和上面一样传入list被修改的情况

    全局变量与局部变量

    python说是不允许再函数内部修改全局变量。
    当全局变量a=1时,函数里不能写a+=1
    当全局变量a=1时,函数里如果写a=2,会视a为函数内的一个局部变量
    当全局变量a=1时,函数里写print(a)是可以做到优先找局部找不到找全局的,但如果函数之后定义里a为局部变量,就会报错 local variable 'a' referenced before assignment
    当全局变量a=[1,2]时, 函数里可以a[0]=3,注意和a=1时的不同
    当函数中a未被视为局部变量之前,可以用global a来声明函数内之后用的a都是全局的.
    (语法上不能global a = 2,必须分开写

    字符

    注意:不可变类型,不可以str[x]='a'
    所以要修改字符串,要么先list(str)str=''.join(l),要么s=s[:i]+'a'+s[i+1:]

    在计算机内存中,统一使用Unicode编码,当需要保存到硬盘或者需要传输的时候,就转换为UTF-8编码
    用记事本编辑的时候,从文件读取的UTF-8字符被转换为Unicode字符到内存里,编辑完成后,保存的时候再把Unicode转换为UTF-8保存到文件

    字符函数ord(), chr()
    str(1.23)转字符串
    字符串函数len(str)

    print('Hi, %s, you have $%d.' % ('Michael', 1000000) )

    字符串中用%%来表示一个%

    'abc''def'abc+def连接字符串,如果是字符串变量,用后者.
    a*n将n个字符串连接
    int(str)字符串转整数
    str.strip('abc')去掉紧贴两边且连续着的‘abc’。括号里什么也不写则去空格
    str.replace('a','b')换字符

    list

    a = ['a', 'b', 'c',1, 2]内部元素数据类型可不同

    元素个数len(a)
    读取方式a[i]
    a[-n]是倒数第n个元素

    a.append(element)同pushback
    a.extend(list)将括号里的list接到原个list后面
    a.pop()即popback
    a.sort(key=None,reverse=False)排序默认从小到大,key用法是比如list里都是二元组,key=lambda x:x[1]

    tuple

    a=(1,2,3,4,5)

    dict

    d = {'Michael': 95, 'Bob': 75, 'Tracy': 85}

    d['Bob']用法同map

    d.get(xxx)同map.find()
    d.pop(xxx)同map.erase()

    set

    s = set([1, 2, 3, 1, 2, 3])重复元素自动去重

    x in s返回bool值表示x是否在集合s中

    s.add(xxx)同set.insert()
    s.remove(xxx)同set.erase()

    s1 & s2, s1 | s2

    def函数

    f(a=1,b=2,c=3)时如果想f(1,2,4)只需写f(c=4)
    可变参数*x相当于接受一个tuple(可为空)
    如果传入list或tuple则使用f(*a), 免得它把你那个看成一个更大tuple里的仅仅一个元素
    关键字参数**x相当于接受一个dict(可为空)
    (注意这里以key=value的形式传入,其中key只能是合法的变量名称,如user,password,不带引号,但存成字符串)
    如果传入dict则使用f(**d),免得它把你那个看成一个更大的dict里的仅仅一个元素

    return (a, b, c)
    a,b,c = f()(a,b,c)=f()L=f()

    pass

    占位,待写

    eval

    传入字符串,进行表达式计算
    不要直接用eval()处理input数据
    会被__import__('os').system(rm -rf *)之类的黑

  • 相关阅读:
    鼠标放在图片上出现提示
    NSIS调用dll
    IIS7 CMD命令
    NSIS检测
    NSIS修改文件夹访问权限
    NSIS——检测IIS是否安装及版本
    NSIS——检测SQL Server安装版本
    NSIS使用技巧集合
    提供修复界面的NSIS安装包
    NSIS MUI教程
  • 原文地址:https://www.cnblogs.com/acha/p/11110437.html
Copyright © 2011-2022 走看看