python学习笔记(一)

本文深入探讨Python编程的基础概念,包括常量、数、字符串、变量、数据类型、逻辑行与物理行、缩进、运算符与表达式、逻辑控制结构、函数、面向对象编程等核心知识点。
一 基本概念
1. 常量
动态语言,可在运行中随时改变变量类型
可强制类型转换
>>>a=1.8
>>>b=int(a)
>>>print b           #并不是四舍五入
1

2. 数
整数
长整数
浮点数
复数  0.0+0.0j 
互动作业:复数的使用和表示法
虚数不能单独存在,它们总是和一个值为 0.0 的实数部分一起来构成一个复数。
复数由实数部分和虚数部分构成
表示虚数的语法: real+imagj
实数部分和虚数部分都是浮点数
虚数部分必须有后缀j 或J。
eg:64.375+1j 4.23-8.5j 0.23-8.55j 1.23e-045+6.7e+089j
复数的内建属性:
属性 描述
num.real 该复数的实部
num num.imag 该复数的虚部
num.conjugate() 返回该复数的共轭复数

3. 字符串
单引号 ‘abc’
双引号 “abc”
单引号和双引号混合使用
>>>a='"abc"'
>>>print a
"abc"
三引号    '''abc'''     """abc"""
如果没有对三引号进行复制操作如a="""abc""" 那么它表示块注视(JAVA中的//),三引号的另一种使用方式叫做文档字符串(相当于JAVA中的方法注释/*abc*/,JAVA中方法注释可以生成API,python中help展现出的文字就是用文档字符串注释的)
转义符 \
和其他语言相同
>>>a="abc\ndef"
>>>print a
abc
def
原生字符串 r”hello world!\n”
正则表达式中使用较多
>>> a=r"hello shit!\n"
>>> print a
hello shit!\n
处理中文前面带u(表示unicode 一个汉字占两字节)
关于python中文处理详细知识可参考下面两个帖子
http://hi.baidu.com/gylxue/item/b25381174beff1fe746a8405  
 字符串是特殊的列表,关于索引 切片 增删等在列表中做详细讲解
>>> a="123456"
>>> b="_".join(a)
>>> print b
1_2_3_4_5_6
常用的索引相关操作
切割操作
邪恶的eval()   eval/I`vael/ 重新运算求出参数的内容
>>> a='1+1'
>>> eval(a)
2
>>> type(eval(a))
<type 'int'>
>>>
>>> b='"1"+"1"'
>>> eval(b)
'11'
>>> b='"1"+"2"'
>>> eval(b)
'12'
>>> type(eval(b))
<type 'str'>
 对于eval的理解:将最终结果扒了层皮,如a='1+1' 先计算内部值a='2' 然后扒皮a就成整数2了。再如a='1'*5,先计算a='11111',后扒皮a=整数11111,eval(eval('"1"')) 扒了两次皮最终结果依然是整数1。理解含义就是修炼独孤九剑。


4. 变量
首字符为字母(大小写均可)或为下划线(_)
其他部分字符为字母(大小写均可)、数字、下划线
区分大小写,myname与myName是两个不同的变量
Python 与大多数其它语言一样有局部变量和全局变量之分,但是它没有明显的变量声明。变量通过首次赋值产生,当超出作用范围时自动消亡。

5. 数据类型
根据数据结构划分:线性表,链表,哈希表。对应的:线性容器(数组,ArrayList),链式容器(LinkedList[这货比较牛逼可以当作栈,队列,双向队列来使用]),hash容器(hashmap,hashset,hashtable)
数值
字符串
线性容器
线性容器的特点:可以通过index访问其元素的容器,因此String也是特殊的线性容器,只不过这个容器中的每个元素是一个字符类型(char)。
– 字符串
– List(列表)
eg:  tag = [1,2,3,4,5,6,7,8,9]
– tuple(元组)
eg:  tag = ('robots', 77, 93, 'try')
列表和元组的区别是列表可修改,元组不能修改,列表就像JAVA中的ArrayList,元组就像JAVA中的数组(一旦定义大小不可改变),需要注意的是这里的元组不变性指的是元组本身,元组中的元素是可以改变的。
关于列表和元组的更多内容参考 http://codingnow.cn/python/325.html
Hash容器
hash容器的数据结构是哈希表。hash就是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数。简单的说就是用来确定元素唯一性的(所以JAVA中我们在比较对象时要重写hashcode方法),比如下面的Dict字典(字典的Key必须是唯一的,像JAVA中的Hashmap),set集合(set集合中的元素必须是唯一的,像JAVA中的Hashset,TreeSet)。要注意的是:hashcode不同值一定不同,hashcode相同值不一定相同.
eg:  tag = {'host': 'earth'}
– Dict(字典)
– set(set集合)
None
类似于JAVA中的NULL,当变量为None类型时只是声明了变量并没有分配内存空间。对于Python在内存的分配后面得好好看看,这里猜测下应该是在栈里面声明了变量名,并没有在堆中分配内存大小。
逻辑类型(True, False)
python中非0都是true

6. 逻辑行与物理行
什么叫逻辑概念和物理概念
逻辑概念比物理概念更抽象些,就如Python的逻辑行表示的是PVM的编译行,物理行是我们代码的真实行。那么由此可以理解高级语言就是物理概念,机器语言就是逻辑概念,我们的每个操作,每个变量都将变成机器识别的0 1串。这个0 1串是有规律的(或者说是有逻辑的),只有有规律的东西机器才能识别(由此可想机器永远不会变的和人一样有思维,因为人的思维是无规律的,机器做不出无规律的程序,好吧YY了)。再看数据结构,元组是真实存在的,我们可以操作它,因此它是一个物理概念。序列是一个定义,它是抽象的。我们不能说创建一个序列。那么序列就是一个逻辑概念。但是我们都知道元组就是一个序列。由此可见:物理概念是逻辑概念的具体表现形式,是客观存在的。逻辑概念是物理概念的抽象定义,是主观存在的。

7. 缩进
同意层次的语句必须有相同的缩进
不要混合使用空白和制表符,这样在不同平台中将无法工作。
强烈建议在缩进时,使用单个制表符或两个或 四个空格(wing ide中tab默认8个空格,修改:Editor-Indentation)

2) 运算符与表达式
1. 运算符
2. 运算符的优先级
-(常量,变量,函数,对象)+运算符+优先级
python是一个更精粹的面向对象语言,除了运算符全是对象。
3. 表达式
互动作业:表达式在计算机中是如何展开的
4. repr()
互动作业:repr()的使用
首先repr是reprensent的缩写,它的意思是表现. repr()和str()方法很像(repr()的使用等价于反引号``),这两个函数接受一个对象作为其参数,返回适当的字符串。可以方便地以字符串的方式获取对象的内容、类型、数值属性等信息。str()函数得到的字符串可读性好,而repr()函数得到的字符串通常可以用来重新获得该对象,通常情况下 obj==eval(repr(obj))  这个等式是成立的(回想之前的eval使用:将返回结果扒层皮,repr()返回的是解释器识别的字符串,字符串继承于obj,所以字符串再扒皮不就获得了它的原始对象了。(注意:并不是所有repr()返回的字符串都能够用 eval()内建函数得到原来的对象。)那么我可以理解repr()方法就是给对象穿一层string皮,这和eval恰恰相反)。

3) 逻辑控制结构
if
>>>a=1
>>>if a==1:
            print 1
        elif a==2:
            print 2
        else:
            print 3
1
for
>>> for x in range(10):
        print x,
0 1 2 3 4 5 6 7 8 9
>>> 
>>> a=('f',1,2,3,'3')
>>> for x in a:
        print x,
f 1 2 3 3
>>>
关于for循环的尾巴else:即在for 循环中,如果没有从任何一个break中退出,则会执行和for对应的else只要从break中退出了,则else部分不执行。 //注:加逗号不换行
>>> for i in range(0,10):
              if i > 5:
                 break;
         else:
              print "hello world";    #break退出这句不会执行
while
>>>a=1
>>>while a<100:
               print a
               a+=1
       else :
               print 'over'
>>>
while循环的尾巴else用法和for循环的else相同
break
continue
注意:python中没有i++ i--

4) 函数
Python中函数表现形式
>>>def fun(a="a",b=2,c=3):
              """my first function"""
              print "a=%s"%a    #%s代表字符串
              print "b=%d"%b    #%d代表整数
              print  "c=",c     #显示出来是:c= 3 多个空格
              return c,b+c     # 可以返回多个返回值,如果用一个变量接收多个返回值,返回的将是一个元组

lambda表达式
>>> f1=lambda x,y:x+y
>>> print f1(1,2)
3
>>> 

闭包
>>>def fun1(x):
              def fun2(y):
                     return x+y
              return fun2       
>>>q=fun1(8)
>>>print q(100)
108
python中函数必须有名字,要想使用匿名函数则需要使用lambda函数
>>>def fun1(x):
              return lambda y:x+y       
>>>q=fun1(8)
>>>print q(100)
108
对于闭包可以理解为对象内部包含对象,内部的对象是外部对象的一个属性。JAVA中闭包是通过接口+内部类实现的闭包允许你将一些行为封装,将它像一个对象一样传来递去,而且它依然能够访问到原来第一次声明时的上下文。

5) 面向对象编程
变量:
1. 前带_的变量: 标明是一个私有变量, 只用于标明, 外部类还是可以访问到这个变量
2. 前带两个_ ,后带两个_ 的变量: 标明是内置变量,
3. 大写加下划线的变量: 标明是 不会发生改变的全局变量
函数:
1. 前带_的变量: 标明是一个私有函数, 只用于标明,
2. 前带两个_ ,后带两个_ 的函数: 标明是特殊函数
class a:
      def __init__(self):                  #__init__是a类的构造函数,这里是无参构造函数。
            self.m=1                   
      def add(self):                       #self的使用有点像JAVA中this的感觉
            self.p=2
            print self.m+self.p
      def __nn_(self):                     #这是专有函数 子类不能调用
            print 'ee'    
        
class b(a):                                   #b(a) 表示b继承于a 
      def __init__(self):
            a.__init__(self)                 #这里必须显性的调用a类的构造方法(因为我们重写了a类的构造器)
            self.n=2
      def sum(self):
            print self.m+self.n
      def __dd(self):                      #这是私有函数 不能直接通过类的实例对象去调用
            print 'dd'
        
class UserProfile(object):          
      def __init__(self, profile):      #这是有参构造方法
            self._profile = profile     #_profile表示私有变量,只是表示外部类还是可以访问到这个变量
      def profile(self):
             return self._profile+1
>>> user=UserProfile(10)
>>>print user.profile()
6) 异常处理
>>>def fuc():
              try:
                   fucc()
              except Exception,e:    #except相当于JAVA中的catch, Exception是一个类,它的实例我们起名叫e
                   print e.message 
>>>fuc()  
global name 'fucc' is not defined

防御式编程
对于防御式编程来说异常处理只是其中一种方案,它更应该是一种编程思想,一种编程习惯。我们来看下《代码大全》中这些话。
想到四个字---学无止尽。对于工作中的防御式编程,最深的体会应该是,NullpointExcetion了,我在调用对象方式时已经下意识的去考虑对象是否可能为空。

7) 模块与包
在组织模块与包的时候文件夹下面必须有一个__init__.py文件,来告诉编译器这个文件夹是一个模块
我们可以打开自己的python安装目录下Lib目录查看其中文件夹,发现每个文件夹中都包含这文件。
__init__.py文件另一个作用是:可以在该文件中写入事件,一旦这个包被import就会触发这个事件(好强大,似乎可以写木马)
当我们在eclipse中编程时,如果给一个文件夹中新建一个__init__.py文件 那么这个文件夹的图标就会变成一个package图标

指定编码格式:#coding=utf-8(或者 # -*- coding: UTF-8-*- )    //注意将文件另存为utf-8的格式
指定编辑器版本:#!/usr/bin/python2.7 

8) 输入、输出、文件和目录操作
os.walk()返回一个三元素的tuple:当前路径、子文件夹名称、文件列表。
Os.listdir()返回指定路径下的所以文件和文件夹

【完美复现】面向配电网韧性提升的移动储能预布局与动态调度策略【IEEE33节点】(Matlab代码实现)内容概要:本文介绍了基于IEEE33节点的配电网韧性提升方法,重点研究了移动储能系统的预布局与动态调度策略。通过Matlab代码实现,提出了种结合预配置和动态调度的两阶段优化模型,旨在应对电网故障或极端事件时快速恢复供电能力。文中采用了多种智能优化算法(如PSO、MPSO、TACPSO、SOA、GA等)进对比分析,验证所提策略的有效性和优越性。研究不仅关注移动储能单元的初始部署位置,还深入探讨其在故障发生后的动态路径规划与电力支援过程,从而全面提升配电网的韧性水平。; 适合人群:具备电力系统基础知识和Matlab编程能力的研究生、科研人员及从事智能电网、能源系统优化等相关领域的工程技术人员。; 使用场景及目标:①用于科研复现,特别是IEEE顶刊或SCI区论文中关于配电网韧性、应急电源调度的研究;②支撑电力系统在灾害或故障条件下的恢复力优化设计,提升实际电网应对突发事件的能力;③为移动储能系统在智能配电网中的应用提供理论依据和技术支持。; 阅读建议:建议读者结合提供的Matlab代码逐模块分析,重点关注目标函数建模、约束条件设置以及智能算法的实现细节。同时推荐参考文中提及的MPS预配置与动态调度上下两部分,系统掌握完整的技术路线,并可通过替换不同算法或测试系统进步拓展研究。
先看效果: https://pan.quark.cn/s/3756295eddc9 在C#软件开发过程中,DateTimePicker组件被视为种常见且关键的构成部分,它为用户提供了图形化的途径来选取日期与时间。 此类控件多应用于需要用户输入日期或时间数据的场景,例如日程管理、订单管理或时间记录等情境。 针对这主题,我们将细致研究DateTimePicker的操作方法、具备的功能以及相关的C#编程理念。 DateTimePicker控件是由.NET Framework所支持的种界面组件,适用于在Windows Forms应用程序中部署。 在构建阶段,程序员能够通过调整属性来设定其视觉形态及运作模式,诸如设定日期的显示格式、是否展现时间选项、预设的初始值等。 在执阶段,用户能够通过点击日历图标的下拉列表来选定日期,或是在文本区域直接键入日期信息,随后按下Tab键或回车键以确认所选定的内容。 在C#语言中,DateTime结构是处理日期与时间数据的核心,而DateTimePicker控件的值则表现为DateTime类型的实例。 用户能够借助`Value`属性来读取或设定用户所选择的日期与时间。 例如,以下代码片段展示了如何为DateTimePicker设定初始的日期值:```csharpDateTimePicker dateTimePicker = new DateTimePicker();dateTimePicker.Value = DateTime.Now;```再者,DateTimePicker控件还内置了事件响应机制,比如`ValueChanged`事件,当用户修改日期或时间时会自动激活。 开发者可以注册该事件以执特定的功能,例如进输入验证或更新关联的数据:``...
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值