小编ant*_*ter的帖子

什么是Python字节串?

什么是Python字节串?

我所能找到的只是关于如何编码为bytestring或解码为ascii或的主题utf-8.我试图了解它是如何工作的.在普通的ASCII字符串中,它是一个数组或字符列表,每个字符代表一个0-255的ASCII值,这就是你知道数字代表什么字符的方式.在Unicode中,它是字符的8或16字节表示,告诉您它是什么字符.

那么什么是字节串?Python如何知道哪些字符代表什么?它是如何在引擎盖下工作的?既然你可以打印甚至返回这些字符串,它会显示字符串表示,我不太明白......

好的,所以我的观点肯定会在这里错过.我被告知这是一个不可变的字节序列,没有任何特殊的解释.

一个字节序列..好吧,让我们说一个字节:
'a'.encode()返回b'a'.

很简单.为什么我能看到一个

说我得到的ASCII值一个,这样做:
printf "%d" "'a"

它返回97.好的,好的,ASCII字符的整数值a.如果我们将97解释为ASCII,比如在C中char,那么我们得到这封信a.很公平.如果我们将字节表示转换为位,我们得到:

01100001

2 ^ 0 + 2 ^ 5 + 2 ^ 6 = 97.凉.

那么为什么要'a'.encode()返回b'a'而不是01100001??
如果它没有特定的解释,它不应该返回类似的东西b'01100001'吗?
似乎像ASCII一样解释它.

有人提到它调用__repr__了bytestring,所以它以人类可读的形式显示.但是,即使我做了类似的事情:

with open('testbytestring.txt', 'wb') as f:
    f.write(b'helloworld') …
Run Code Online (Sandbox Code Playgroud)

python string bytestring

38
推荐指数
3
解决办法
4万
查看次数

警告:在C++模式下将'c-header'输入视为'c ++ - header'时,不推荐使用此行为

这个clang ++错误消息是什么意思,为什么我得到它?我似乎无法在互联网上找到任何关于它的东西......
clang: warning: treating 'c-header' input as 'c++-header' when in C++ mode, this behavior is deprecated

这是我的代码,

MergeSort.h:

#ifndef __MERGESORT_H__
#define __MERGESORT_H__

#include <iostream>
using namespace std;

class MergeSort;

class MergeSort
{
    public:

    MergeSort();
    MergeSort(const int* list, int length);
    ~MergeSort();

    friend ostream& operator<< (ostream& os, const MergeSort& ms);

    private:

    int* list;
    int len;
};

ostream& operator<< (ostream& os, const MergeSort& ms);
#endif
Run Code Online (Sandbox Code Playgroud)

MergeSort.cpp:

#include <iostream>
#include "MergeSort.h"

using namespace std;

MergeSort::MergeSort()
{
    list = new …
Run Code Online (Sandbox Code Playgroud)

c++ clang

19
推荐指数
2
解决办法
2万
查看次数

一个简单的Hello World setuptools包并用pip安装它

我无法确定如何使用setuptools安装我的软件包,我已经尝试阅读它上面的文档和SO帖子,但我无法让它正常工作.我正在尝试使用一个简单的helloworld应用程序.这是我得到了多远:

helloworld.py:

print("Hello, World!")
Run Code Online (Sandbox Code Playgroud)

README.txt文件:

Hello, World! readme
Run Code Online (Sandbox Code Playgroud)

MANIFEST.in:

recursive-include images *.gif
Run Code Online (Sandbox Code Playgroud)

setup.py:

from setuptools import setup, find_packages

setup(
    name='helloworld',
    version='0.1',
    license='BSD',
    author='gyeh',
    author_email='hello@world.com',
    url='http://www.hello.com',
    long_description="README.txt",
    packages=find_packages(),
    scripts = ['helloworld.py'],
    package_data={
        "" : ["images/*.gif"]
    },
    data_files=[('images', ['images/hello.gif'])],
    description="Hello World testing setuptools",
)
Run Code Online (Sandbox Code Playgroud)

我有一个名为images/hello.gif的空白文件,我希望将其作为附加数据包含在我的包中.文件夹结构如下所示:

testsetup/  
|-- helloworld.py  
|-- images/  
|-- --- hello.gif  
|-- MANIFEST.in  
|-- README.txt  
|-- setup.py  
Run Code Online (Sandbox Code Playgroud)

当我运行时python setup.py sdist,它会生成disthelloworld.egg-info成功.当我在egg-info下查看SOURCES.txt时,它包含脚本和images文件夹下的图像,而dist下的tarball也包含它们.

但是,当我尝试pip install --user helloworld-0.1.tar.gz在tarball 上运行时,它成功安装了它,但我找不到程序文件helloworld.py和images/hello.gif.

当我查看下面时$HOME/.local/lib/python3.3/site-packages/,我看到egg-info文件夹及其中安装的所有内容.但该$HOME/.local/bin文件夹甚至不存在.程序文件存储在别处吗?我在这做错了什么?我正在运行Arch Linux.

python distutils pip setuptools pypi

13
推荐指数
1
解决办法
3277
查看次数

剥离Haskell

我应该首先提一下,我对Haskell很新.有没有特别的理由let在Haskell中保留表达式?

我知道Haskell摆脱了rec对应于let语句的Y-combinator部分的关键字,表明它是递归的.为什么他们没有let完全摆脱声明呢?

如果他们这样做,陈述在某种程度上似乎会更加迭代.例如,类似于:

let y = 1+2
    z = 4+6
    in y+z
Run Code Online (Sandbox Code Playgroud)

只会是:

y = 1+2
z = 4+6
y+z
Run Code Online (Sandbox Code Playgroud)

对于熟悉函数式编程的人来说,哪个更易读,更容易阅读.我能想到保持它的唯一原因是这样的:

aaa = let y = 1+2
          z = 4+6
          in  y+z
Run Code Online (Sandbox Code Playgroud)

如果没有这个let,我认为最终会出现模棱两可的语法:

aaa = 
  y = 1+2
  z = 4+6
  y+z
Run Code Online (Sandbox Code Playgroud)

但是如果Haskell没有忽略空格,并且代码块/范围与Python类似,它是否能够删除let

是否有更强的理由留下来let

对不起,如果这个问题看起来很愚蠢,我只是想了解更多关于它为什么存在的问题.

haskell let

10
推荐指数
4
解决办法
644
查看次数

没有空字符串的Django CharField

有什么办法可以使CharField(或TextField)不接受空字符串?我正在尝试使用,blank=False但无法正常工作...

class Foo(models.Model):
    title = models.CharField(max_length=124, blank=False)
Run Code Online (Sandbox Code Playgroud)

然后,在syncdb运行之后python manage.py shell,我可以输入:

f = Foo()
f.save()
Run Code Online (Sandbox Code Playgroud)

而且没有抱怨。该对象具有带值的标题''。我希望这种情况发生,如果Foo()没有明确给定非空字符串,我希望它抱怨。有什么办法吗?

我正在使用Django 1.6

python django

5
推荐指数
2
解决办法
1618
查看次数

在没有++的情况下在Haskell中从左到右构建列表

有没有办法在Haskell中从左到右构建列表而不使用++

cons是一个恒定的时间操作,我想保持代码有效.我觉得有一种普遍的方式来利用Haskell的懒惰来做这样的事情,但我想不到它.

现在我正在编写一个创建Collat​​z序列的函数,但它正在以错误的方向构建列表:

module CollatzSequence where

collatz :: (Integral a) => a -> [a] -> [a];
collatz n l
  | n <= 0    = error "Enter a starting number > 0"
collatz n []  = collatz n [n]
collatz n l@(x:_)
  | x == 1    = l
  | even x    = collatz n ((div x 2):l)
  | otherwise = collatz n ((x*3 + 1):l)
Run Code Online (Sandbox Code Playgroud)

在GHCi中:

*CollatzSequence> collatz 13 []
[1,2,4,8,16,5,10,20,40,13]
Run Code Online (Sandbox Code Playgroud)

haskell list cons

2
推荐指数
1
解决办法
184
查看次数

在vim中自动换行而不插入换行符

如何设置vim来包装文本而不插入换行符?

基本上:

  • 我希望有一个最大宽度,比如80行
  • 当我输入一个段落时,如果一个单词通过80行标记,它应该包裹整个单词(不分割单词)
  • 如果我键入多行,它应该仍然是包装
  • 如果我保存文件,除非在编辑模式下键入时明确按Enter键,否则我不会看到任何换行符

我可以通过以下方式获得一些此行为:

:set textwidth=80
:set wrap
Run Code Online (Sandbox Code Playgroud)

除此之外将插入换行符,我希望它插入换行符.我已经尝试了这个,但它不起作用.

vim

2
推荐指数
2
解决办法
1395
查看次数

教会编码(条件)

我正在尝试写出一些lambda演算,但我不能让教会条件工作.我应该说我是Haskell noob.

我已经在网上和SO上看过解决方案,但它们都涉及引入新类型和其他技巧,但我希望尽可能接近原始语法.例如:

tru :: Integer -> Integer -> Integer
tru = \x -> \y -> x

fals :: Integer -> Integer -> Integer
fals = \x -> \y -> y

main = do
  print (tru 2 3)
  print (fals 5 6)
Run Code Online (Sandbox Code Playgroud)

匹配教堂布尔的确切语法:

\a.\b.a
\a.\b.b 
Run Code Online (Sandbox Code Playgroud)

有没有什么方法可以匹配教堂if/else的确切语法?我正在尝试复制\p.\a.\b.p a b,但我不确定我做错了什么:

ifelse :: Integer -> Integer -> Integer -> Integer -> Integer -> Integer
ifelse = \p -> \a -> \b -> p -> a -> b

main = do
  print …
Run Code Online (Sandbox Code Playgroud)

haskell church-encoding

1
推荐指数
1
解决办法
256
查看次数

Monads的部分升降机?

对于monad来说,有什么像部分升降机吗?我需要类型签名是这样的:

Monad m => (a1 -> r) -> a1 -> m r
Run Code Online (Sandbox Code Playgroud)

而不是这个:

Monad m => (a1 -> r) -> m a1 -> m r
Run Code Online (Sandbox Code Playgroud)

用于>=>和其他原因.我正在寻找上述做法的规范方式.

haskell lifting

1
推荐指数
1
解决办法
95
查看次数

标签 统计

haskell ×4

python ×3

bytestring ×1

c++ ×1

church-encoding ×1

clang ×1

cons ×1

distutils ×1

django ×1

let ×1

lifting ×1

list ×1

pip ×1

pypi ×1

setuptools ×1

string ×1

vim ×1